The point I was trying to make was that in some cases, Bo Jacobi’s approach to generating all perms of x 1s and (y-x) 0s by filtering all Boolean of length y could be expensive, and that using some form of comb might be considered preferable.
I found it interesting to adapt the version of comb in addons/stats to generate the integer encodings of the required booleans, as shown in Smpscomb. Rather ironically, it turns out that Bo required the results of comb, or its variants, so it was unnecessary to render them as booleans! Cheers, Mike Sent from my iPad > On 3 Aug 2021, at 14:10, R.E. Boss <r.e.b...@outlook.com> wrote: > > My 2cts: https://code.jsoftware.com/wiki/Essays/Combinations > > > R.E. Boss > > > -----Original Message----- > From: Programming <programming-boun...@forums.jsoftware.com> On Behalf Of > 'Michael Day' via Programming > Sent: zondag 1 augustus 2021 19:55 > To: programm...@jsoftware.com > Subject: Re: [Jprogramming] Tacit hook > > 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 <programm...@jsoftware.com>: >> >> 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 <rauldmil...@gmail.com> 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 <srdjan.sti...@gmail.com> >>>> wrote: >>>> >>>> You can use “13 : ‘…’” construct to get tacit verb. >>>> >>>> On Sat 31. Jul 2021 at 18:00, 'Pascal Jasmin' via Programming < >>>> programm...@jsoftware.com> wrote: >>>> >>>>> 2 ([ (] #~ [ = +/"1@:]) f@]) 6 >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> On Saturday, July 31, 2021, 11:52:10 a.m. EDT, 'Bo Jacoby' via >>>>> Programming <programm...@jsoftware.com> 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 > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm