[Jprogramming] A Different Less?
Henry Rich
henryhrich at gmail.com
Wed Jan 20 22:40:03 UTC 2016
The experiment you made is insufficient for the purpose.
Usually when u@:v is fast, ([: u v) gets the same treatment. Since
/:@:/: is fast, I expected ([: /: /:) to be also. (It's not, surprisingly).
/:@:/: is handled same as /:@/: since they are equivalent.
<.@% is fast, but there is no reason to expect ([: <. %~) to be fast,
for two reasons:
1. They have different rank. But <.@:% is also fast, so it turns out
this is not the difference.
2. Since <.@:% is fast, so will <.@:%~ be, and normally ([: <. %) too;
but ([: <. %~) is totally different. It is equivalent to <.@:(%~)
which is NOT fast.
I have not been able to figure out what the verbs f are for which <. at f
is fast.
Henry Rich
On 1/20/2016 8:31 AM, 'Pascal Jasmin' via Programming wrote:
>> does [:/:/: not also benefit from special code?
> I doubt it does,
>
> timespacex '123 ([: <. %~) 210293810238120398120398120398x + i.1000'
> 0.00241248 1.27885e6
> timespacex '123 ( <.@%~) 210293810238120398120398120398x + i.1000'
> 0.000590399 836992
>
>
> ----- Original Message -----
> From: Mike Day <mike_liz.day at tiscali.co.uk>
> To: programming at jsoftware.com
> Sent: Wednesday, January 20, 2016 7:50 AM
> Subject: Re: [Jprogramming] A Different Less?
>
> I wasn't advocating /:/: . I prefer using @ but the 13 : ' .... '
> had produced [:/:/: . Conicidentally, Linda appears to
> favour the [:u v idiom to u at v .
>
> So, for Linda's benefit, does [:/:/: not also benefit from
> special code?
>
> Mike
>
> On 20/01/2016 12:29, Henry Rich wrote:
>> Note: /:@/: y is better than /: /: y (special code)
>>
>> Henry Rich
>>
>> On 1/20/2016 5:45 AM, Mike Day wrote:
>>> Maybe simpler but it requires evaluation of /:/:y twice, whereas
>>> Raul's oc manages to make rank the right hand argument to (] - {) .
>>>
>>> This tacitisation might be what you're looking for:
>>> 13 :'r-(i.~ y){ r =./:/:y'
>>>
>>> i.~ (] - {) [: /: /:
>>>
>>>
>>> It reproduces oc except for using [: rather than @ !
>>>
>>> Mike
>>>
>>> On 20/01/2016 10:27, Linda A Alvord wrote:
>>>> A simpler f:
>>>>
>>>> f=: 13 :'(/:/:y)-(i.~ y){/:/:y'
>>>> f
>>>> ([: /: /:) - i.~ { [: /: /:
>>>>
>>>> Linda
>>>> -----Original Message-----
>>>> From: Programming [mailto:programming-bounces at forums.jsoftware.com]
>>>> On Behalf Of Linda A Alvord
>>>> Sent: Wednesday, January 20, 2016 3:15 AM
>>>> To: programming at jsoftware.com
>>>> Subject: Re: [Jprogramming] A Different Less?
>>>>
>>>> Here's another way to write the code that so far is the fastest. How
>>>> does it compare?
>>>>
>>>> A=:'abcabbe'
>>>> B=:'babe'
>>>> f=: 13 :'(/:/:y)-(y i. y){/:/:y'
>>>> g=: 13 :'((f x)>: (( ~.y)i.x){(#/.~y),0: y)#x'
>>>> A g B
>>>> cab
>>>> f
>>>> ([: /: /:) - i.~ { [: /: /:
>>>> g
>>>> [ #~ ([: f [) >: ([ i.~ [: ~. ]) { ([: #/.~ ]) , [: 0: ]
>>>>
>>>> Linda
>>>>
>>>> -----Original Message-----
>>>> From: Programming [mailto:programming-bounces at forums.jsoftware.com]
>>>> On Behalf Of Raul Miller
>>>> Sent: Monday, January 18, 2016 12:51 PM
>>>> To: Programming forum
>>>> Subject: Re: [Jprogramming] A Different Less?
>>>>
>>>> Hmm...
>>>>
>>>> A bugfixed version of my previous implementation (it broke when x -.
>>>> y was empty) performs approximately the same, for me:
>>>>
>>>> cle=: ,~ #~ i.@#@,~ e. [: ; (2*#/.~@]) (}.&.>~ #@[ {. ])~ (]i.,~)
>>>> </. i.@#@,~
>>>>
>>>> I say approximately, because timing variations mean that when I test
>>>> on the same data, sometimes it's faster and sometimes it's slower than
>>>>
>>>> oc=: i.~ (] - {) /:@/:
>>>> cless =: [ #~ oc@:[ >: (i.~~.) { (#/.~,0:)@]
>>>>
>>>> That said, Boss's implementation is clearly more concise...
>>>>
>>>> Thanks,
>>>>
>>>> --
>>>> Raul
>>>>
>>>>
>>>>
>>>> On Mon, Jan 18, 2016 at 12:17 PM, Marshall Lochbaum
>>>> <mwlochbaum at gmail.com> wrote:
>>>>> That's a very cool solution, and much quicker than the one based on
>>>>> progressive index-of. Instead of taking the occurrence count of both x
>>>>> and y, it just takes the count for x and compares it to the total
>>>>> number of occurrences in y, given by (#/.~).
>>>>>
>>>>> Here's a comparison of the two methods. It turns out in the version
>>>>> based on progressive index-of, the desired verb can be obtained just
>>>>> from replacing (i.) with (-.) and then using the first column of the
>>>>> result to select from x, so I've used that version.
>>>>>
>>>>> NB. Shared verb for occurrence count
>>>>> oc=: i.~ (] - {) /:@/:
>>>>> NB. Simplified form of what Roger and I posted
>>>>> cless1 =: [ {~ [: {."1 #@[ ({. -.&(,.oc) }.) [ i. ,
>>>>> NB. Tacitized R.E. Boss solution
>>>>> cless2 =: [ #~ oc@:[ >: (i.~~.) { (#/.~,0:)@]
>>>>>
>>>>> NB. test data
>>>>> 'a b' =. 500 ({.;~}.) +&(1e5 ?@$ 26)&.(a.&i.) 'a'
>>>>> 10 (6!:2) 'a cless1 b'
>>>>> 0.0178952
>>>>> 10 (6!:2) 'a cless2 b'
>>>>> 0.0063745
>>>>> a (cless1 -: cless2) b
>>>>> 1
>>>>>
>>>>> To summarize, here's the fastest solution so far:
>>>>> oc=: i.~ (] - {) /:@/:
>>>>> cless =: [ #~ oc@:[ >: (i.~~.) { (#/.~,0:)@]
>>>>>
>>>>> Marshall
>>>>>
>>>>> On Mon, Jan 18, 2016 at 03:49:46PM +0000, R.E. Boss wrote:
>>>>>> I'm getting old, but still remember my solution, improved by Hui:
>>>>>>
>>>>>> http://www.jsoftware.com/pipermail/general/2004-May/017503.html
>>>>>>
>>>>>> 'abcabbe' strikeb2 'babe'
>>>>>> cab
>>>>>>
>>>>>> Curious how it performs compared to the other solutions.
>>>>>>
>>>>>>
>>>>>> R.E. Boss
>>>>>>
>>>>>>
>>>>>>> -----Original Message-----
>>>>>>> From: Programming [mailto:programming-bounces at forums.jsoftware.com]
>>>>>>> On Behalf Of June Kim (???)
>>>>>>> Sent: maandag 18 januari 2016 5:19
>>>>>>> To: Programming forum <programming at jsoftware.com>
>>>>>>> Subject: [Jprogramming] A Different Less?
>>>>>>>
>>>>>>> Hello
>>>>>>>
>>>>>>> I am looking for a verb(cless) that does something similar to
>>>>>>> Less(-.) but counting the elimination, for example:
>>>>>>>
>>>>>>> 'abcabbe' -. 'abbe'
>>>>>>>
>>>>>>> c
>>>>>>>
>>>>>>> 'abcabbe' cless 'babe' NB. get rid of y letters counting the
>>>>>>> occurrences
>>>>>>>
>>>>>>> 'cab'
>>>>>>>
>>>>>>>
>>>>>>> It is easier to define such a verb recursively: 'abcabbe' cless
>>>>>>> 'babe'
>>>>>>> equald to 'e' cless~ 'b' cless~ 'a' cless~ 'b' cless~ 'abcabbe'
>>>>>>>
>>>>>>>
>>>>>>> I think recursive definition isn't a usual J-ic approach.
>>>>>>>
>>>>>>>
>>>>>>> How would you implement such a verb elegantly(with which I mean
>>>>>>> short)?
>>>>>>>
>>>>>>>
>>>>>>> June
>>>>>>> -------------------------------------------------------------------
>>>>>>> --- 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
>
> ---
> 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
More information about the Programming
mailing list