Thanks to Mike!
comb=: 4 : 0
NB.*comb v combinations of size x from i.y
comb=: 3 : 0
comb~ y
:
k=. i.>:d=. y-x
z=. (d$<i.0 0),<i.1 0
for. i.x do. z=. k ,.&.> ,&.>/\. >:&.> z end.
3 comb 6
I need to study in order to make it do what I want. I am aware that my
programming is embarassingly inefficient.
Thanks to Raul!
2 (((= +/"1) # ]) f) 6 NB. fork, not hook!
I wonder why it is hard to code the hook. It is not important, but it is
strange.
I am studying the bessel correction. I turns out that the mean of the bessel
corrected variances of all samples is equal to the bessel corrected variance of
the population.
E =. +/%# NB. mean
Va =. E@:*:-*:@:E NB. Variance
Bc =. -.&.:%@#*Va NB. Bessel corrected variance
S =. ((((=+/"1)#])#&2#:[:i.2&^) #)#] NB. samples
Bc n=.i.8
6
E Bc |:4 S n
6
E Bc |:5 S n
6
E Bc |:6 S n
6
E Bc |:7 S n
6
E Bc |:8 S n
6
Den søndag den 1. august 2021 16.06.21 CEST skrev 'Mike Day' via
Programming <[email protected]>:
Nice work, especially persuading 13 : to return a tacit version.
I had reached the same solution as Pascal Jasmin’s, so not worth a comment in
itself.
However, it is just about worth pointing out that the filtering approach gets
expensive for larger values of y; eg 3 Smps 20 would entail filtering 2^20
rows to obtain 1140. In that case, I reckon it’s better to use the 1s indices
provided by, eg, 3 comb 20 .
comb is in addons/stats/base/combinatorial .
In case it matters!
Mike
Sent from my iPad
> On 31 Jul 2021, at 20:48, Raul Miller <[email protected]> wrote:
>
> That's a bit tricky in this case, but it can be done:
>
> First off, the problem:
>
> 13 : '(#~x=+/"1)f y' NB. select row
> 4 : '(#~x=+/"1)f y'
>
> But we can work around this by giving 13 : a variant expression:
>
> 13 : 't#~x=+/"1 t=.f y'
> [ (] #~ [ = [: +/"1 ]) [: f ]
>
> And, in this example, we can turn this into a hook through inspection:
> Smps=: (] #~ [ = [: +/"1 ]) f
>
> This could be simplified further, of course:
> 2 ((] #~ (= +/"1)) f) 6
> and
> 2 (((= +/"1) # ]) f) 6
>
> do the same computation.
>
> I hope this helps,
>
> --
> Raul
>
>> On Sat, Jul 31, 2021 at 12:43 PM Srdjan Stipic <[email protected]>
>> wrote:
>>
>> You can use “13 : ‘…’” construct to get tacit verb.
>>
>> On Sat 31. Jul 2021 at 18:00, 'Pascal Jasmin' via Programming <
>> [email protected]> wrote:
>>
>>> 2 ([ (] #~ [ = +/"1@:]) f@]) 6
>>>
>>>
>>>
>>>
>>>
>>>
>>> On Saturday, July 31, 2021, 11:52:10 a.m. EDT, 'Bo Jacoby' via Programming
>>> <[email protected]> wrote:
>>>
>>>
>>>
>>>
>>>
>>> Consider this code
>>>
>>> f=.#&2#:[:i.2&^ NB. 0-1 rows
>>>
>>>
>>>
>>>
>>> Smps=. 4 : '(#~x=+/"1)f y' NB. select rows
>>>
>>> 2 Smps 6 NB. for example
>>> 0 0 0 0 1 1
>>>
>>> 0 0 0 1 0 1
>>>
>>> 0 0 0 1 1 0
>>>
>>> 0 0 1 0 0 1
>>>
>>> 0 0 1 0 1 0
>>>
>>> 0 0 1 1 0 0
>>>
>>> 0 1 0 0 0 1
>>>
>>> 0 1 0 0 1 0
>>>
>>> 0 1 0 1 0 0
>>>
>>> 0 1 1 0 0 0
>>>
>>> 1 0 0 0 0 1
>>>
>>> 1 0 0 0 1 0
>>>
>>> 1 0 0 1 0 0
>>>
>>> 1 0 1 0 0 0
>>>
>>> 1 1 0 0 0 0
>>>
>>>
>>>
>>> I want to rewrite it tacit
>>> Smps=.((=+/)"1 f)#f@]
>>> This works but is without the hook, so "f" is repeated.
>>> How to write the hook tacitly?
>>> I believe that this is easy, but I am stuck.
>>> Thank you!
>>> Bo.
>>>
>>>
>>>
>>>
>>> ----------------------------------------------------------------------
>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>> ----------------------------------------------------------------------
>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>>
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm