Actually group2 and f agree. Howeer this was an earlier wrong version of "group"
(0.35 0.3 0.3 group2 i.20)-:0.35 0.3 0.3 f i.20
1
Now look at a similar explicit version of Ric's "real group"
assignGrp=: +/\@(* #) I. i.@#@]
group=: assignGrp </. ]
g=: 13 :'((+/\x*#y)I.y)</.y'
(0.35 0.35 0.3 group i.14)-:0.35 0.35 0.3 g i.14
1
g
] </.~ ] I.~ [: +/\ [ * [: # ]
Linda
-----Original Message-----
From: Programming [mailto:[email protected]] On Behalf
Of Raul Miller
Sent: Saturday, December 16, 2017 12:18 AM
To: Programming forum <[email protected]>
Subject: Re: [Jprogramming] Splitting an Array into several arrays
When you say things like this, it's good to provide an example of what you're
talking about.
Perhaps:
0.35 0.3 0.3 group2 'ABCDEFGHIJKLMN'
┌─────┬─────┬────┐
│ABCDE│FGHIJ│KLMN│
└─────┴─────┴────┘
0.35 0.3 0.3 f 'ABCDEFGHIJKLMN'
|domain error: f
Thanks,
--
Raul
On Sat, Dec 16, 2017 at 12:14 AM, Ric Sherlock <[email protected]> wrote:
> Note that group2 and f are not equivalent.
>
> On 16/12/2017 00:05, "Linda Alvord" <[email protected]> wrote:
>
>> Ric,
>>
>> Here's a response to an old thread which I took from my "things to think
>> about collection:
>>
>> group2=:(+/\@(* #) I. i.@#@]) </. ]
>> 0.35 0.3 0.3 group2 i.14
>> ┌─────────┬─────────┬───────────┐
>> │0 1 2 3 4│5 6 7 8 9│10 11 12 13│
>> └─────────┴─────────┴───────────┘
>> f=: 13 : '(x (] I.~ [: +/\ [ * [: # ]) y)</. y'
>> 0.35 0.3 0.3 f i.14
>> ┌─────────┬─────────┬───────────┐
>> │0 1 2 3 4│5 6 7 8 9│10 11 12 13│
>> └─────────┴─────────┴───────────┘
>>
>> group2
>> (+/\@(* #) I. i.@#@]) </. ]
>> f
>> ] </.~ ] I.~ [: +/\ [ * [: # ]
>>
>> I was surprised at how neat f turned out when I wrote an explicit
>> definition of my version of you way to group the numbers.
>>
>> Linda
>>
>>
>> -----Original Message-----
>> From: Programming [mailto:[email protected]] On
>> Behalf Of Ric Sherlock
>> Sent: Saturday, October 21, 2017 3:21 PM
>> To: Programming JForum <[email protected]>
>> Subject: Re: [Jprogramming] Splitting an Array into several arrays
>>
>> Jon,
>> The following assigns each of the data points to a group, then boxes those
>> groups using key.
>>
>> assignGrp=: +/\@(* #) I. i.@#@]
>> group=: assignGrp </. ]
>> 0.35 0.35 0.3 group i.14
>> ┌─────────┬─────────┬───────────┐
>> │0 1 2 3 4│5 6 7 8 9│10 11 12 13│
>> └─────────┴─────────┴───────────┘
>>
>> On 21/10/2017 02:14, "'Jon Hough' via Programming" <
>> [email protected]> wrote:
>>
>> > Hi,
>> >
>> > What I am really after is a verb that splits by percentage. To give a
>> > concrete uses case:
>> > I have a dataset, which I wish to split into training set, validation
>> > set, and testing set.
>> >
>> > I want 35% of the datapoints to go in the training set, 35% go in the
>> > validation set, the rest go in the test set. (Just example numbers).
>> >
>> >
>> > No need to worry about shuffling, randomizing etc, I am assuming the
>> > data is sufficiently random.
>> > As Raul said, I can simplify slightly by just using the size of the
>> > dataset as the right argument.
>> >
>> > --------------------------------------------
>> > On Fri, 10/20/17, Erling Hellenäs <[email protected]> wrote:
>> >
>> > Subject: Re: [Jprogramming] Splitting an Array into several arrays
>> > To: [email protected]
>> > Date: Friday, October 20, 2017, 10:06 PM
>> >
>> > Hi all !
>> >
>> > A splitSubs with CutN could possibly look like
>> > this:
>> >
>> > splitSubsE=: ([ (([:
>> > # [) {. ]) ([: <. 0.5 + [: }: [ * [: # ]) ( [ , ([:
>> > # ]) - [: +/ [) ]) CutN ]
>> >
>> > (i.0) splitSubsE i.0
>> >
>> > (,55) splitSubsE ,5
>> > ┌─┐
>> > │5│
>> > └─┘
>> > split
>> > splitSubsE i.0
>> > ┌┬┬┐
>> > ││││
>> > └┴┴┘
>> > split splitSubsE i.1
>> > ┌┬┬─┐
>> > │││0│
>> > └┴┴─┘
>> > split
>> > splitSubsE i.2
>> > ┌─┬─┬┐
>> > │0│1││
>> > └─┴─┴┘
>> > split
>> > splitSubsE i.3
>> > ┌─┬─┬─┐
>> > │0│1│2│
>> > └─┴─┴─┘
>> >
>> > split splitSubsE i.4
>> > ┌─┬─┬───┐
>> > │0│1│2 3│
>> > └─┴─┴───┘
>> >
>> > Cheers
>> >
>> > Erling
>> > Hellenäs
>> >
>> >
>> > Den 2017-10-20 kl. 14:11, skrev Erling
>> > Hellenäs:
>> > > Hi all!
>> > >
>> > > I looked for a
>> > version of Cut which takes the number of items in each > group as
>> > left argument. I didn't find one. I think it is what you most >
>> > often need, because it allows groups with zero length content.
>> > >
>> > > I made CutN as an
>> > illustration:
>> > >
>> > >
>> > CutN=:((# {. 0 , [: }: [: +/\ ])([: < [ + [: i. ])"0 ])@:[ {&.>/ [:
>> > < ] >
>> > > (i.0) CutN i.0
>> > >
>> > > (,0) CutN i.0
>> > > ┌┐
>> > > ││
>> > > └┘
>> > > (,1) CutN
>> > 10+i.1
>> > > ┌──┐
>> > > │10│
>> > >
>> > └──┘
>> > > 0 2 CutN 10+i.2
>> > > ┌┬─────┐
>> > > ││10 11│
>> > >
>> > └┴─────┘
>> > > 2 5 0
>> > CutN 10+i.7
>> > >
>> > ┌─────┬──────────────┬┐
>> > > │10 11│12 13 14 15 16││
>> > >
>> > └─────┴──────────────┴┘
>> > > 0 7 0 CutN 10+i.7
>> > >
>> > ┌┬────────────────────┬┐
>> > > ││10 11 12 13 14 15 16││
>> > >
>> > └┴────────────────────┴┘
>> > >
>> > > Cheers,
>> > >
>> > > Erling Hellenäs
>> > >
>> > >
>> > >
>> > Den 2017-10-20 kl. 10:42, skrev 'Jon Hough' via
>> > Programming:
>> > >> The problem:
>> > >> Let X be an array.
>> > >> X=: i. 50 NB. example
>> > >>
>> > >> Let
>> > 'split' be the percentages that each subarray takes from X, >>
>> > sequentially >> e.g >> split =:
>> > 0.35 0.35 0.3 NB. first array takes 35% , second sub array
>> >
>> > >> takes 35%, third takes 30%
>> > >> So in the end
>> > >>
>> > >> My
>> > solution
>> > >>
>> > >>
>> > splitSubs =:
>> > -.~&.>/\@:(i.&.>"0@:<"0)@:}.@:>.@:((+/\
>> > - ])@:[ (* , ])
>> > >> #@:])
>> > >>
>> > >> split
>> > splitSubs X
>> > >>
>> > >>
>> > >> This gives 3
>> > boxed arrays. Each array holds the indices to take from X.
>> > >>
>> > >>
>> > There is a slight problem in that the first and second subarrays >>
>> > have different >> length, due to rounding error. I am not too
>> > bothered about that >> since, depending on the size of X and the
>> > percentages, this is >> unavoidable.
>> > >>
>> > >> Any more
>> > succinct, nicer solutions?
>> > >>
>> >
>> > ----------------------------------------------------------------------
>> > >> For information about J forums see
>> > https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.jsoftware.com%2Fforums.htm&data=02%7C01%7C%7C60fdad7d3232412dc24908d544447895%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636489983228215781&sdata=eJ%2BFJU3ytu8nNh8UGaBOmsOUl0FvgN1%2Ba5Nr0qpCmrQ%3D&reserved=0
>> > >
>> > >
>> >
>> > ----------------------------------------------------------------------
>> > > For information about J forums see
>> > https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.jsoftware.com%2Fforums.htm&data=02%7C01%7C%7C60fdad7d3232412dc24908d544447895%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636489983228215781&sdata=eJ%2BFJU3ytu8nNh8UGaBOmsOUl0FvgN1%2Ba5Nr0qpCmrQ%3D&reserved=0
>> >
>> >
>> > ----------------------------------------------------------------------
>> > For information about J forums see
>> > https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.jsoftware.com%2Fforums.htm&data=02%7C01%7C%7C60fdad7d3232412dc24908d544447895%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636489983228215781&sdata=eJ%2BFJU3ytu8nNh8UGaBOmsOUl0FvgN1%2Ba5Nr0qpCmrQ%3D&reserved=0
>> > ----------------------------------------------------------------------
>> > For information about J forums see
>> > https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.jsoftware.com%2Fforums.htm&data=02%7C01%7C%7C60fdad7d3232412dc24908d544447895%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636489983228215781&sdata=eJ%2BFJU3ytu8nNh8UGaBOmsOUl0FvgN1%2Ba5Nr0qpCmrQ%3D&reserved=0
>> ----------------------------------------------------------------------
>> For information about J forums see
>> https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.jsoftware.com%2Fforums.htm&data=02%7C01%7C%7C60fdad7d3232412dc24908d544447895%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636489983228215781&sdata=eJ%2BFJU3ytu8nNh8UGaBOmsOUl0FvgN1%2Ba5Nr0qpCmrQ%3D&reserved=0
>> ----------------------------------------------------------------------
>> For information about J forums see
>> https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.jsoftware.com%2Fforums.htm&data=02%7C01%7C%7C60fdad7d3232412dc24908d544447895%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636489983228215781&sdata=eJ%2BFJU3ytu8nNh8UGaBOmsOUl0FvgN1%2Ba5Nr0qpCmrQ%3D&reserved=0
> ----------------------------------------------------------------------
> For information about J forums see
> https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.jsoftware.com%2Fforums.htm&data=02%7C01%7C%7C60fdad7d3232412dc24908d544447895%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636489983228215781&sdata=eJ%2BFJU3ytu8nNh8UGaBOmsOUl0FvgN1%2Ba5Nr0qpCmrQ%3D&reserved=0
----------------------------------------------------------------------
For information about J forums see
https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.jsoftware.com%2Fforums.htm&data=02%7C01%7C%7C60fdad7d3232412dc24908d544447895%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636489983228215781&sdata=eJ%2BFJU3ytu8nNh8UGaBOmsOUl0FvgN1%2Ba5Nr0qpCmrQ%3D&reserved=0
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm