Thanks,  Bo.

This variation on comb works pretty well,  except it doesn't test for the
empty case, ie x = 0:

NB. these boolean verbs are quicker than multiply and add for this case
twice =: 1 & (32 b.)
or    =: 23 b.

Smpscomb =: 4 : 0
 k=. 2^i.>:d=.y-x
 z=. <"0 k
 for. i.<: x do.
   z=. k or &.> ,&.>/\. twice&.> z
 end.
 #:/:~;z
)

   ts
6!:2 , 7!:2@]
   ts'3 Smps 20'
0.6071034 2.873121e8
   ts'3 Smpscomb 20'
0.0001229 66976
   3 (Smps -: Smpscomb) 20
1

The sort adds a little time and space;  it is only necessary if you require the same
ordering as your original example.

Cheers,

Mike

On 01/08/2021 18:31, 'Bo Jacoby' via Programming wrote:
  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


--
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to