I cannot confirm the performance figures of Day:
      ts 'D=:10000000$d'        NB. reference timing
0.0505433 6.71098e7

   ts'((1,2>/\]);@(<&(<./\);. 1)])D'
0.203427 8.38894e7
   ts'((1,}:>}.);@(<&(<./\);. 1)])D'
0.215576 1.50998e8

neither detect much difference in performance in:
   ts '(}.>}:)D'
0.142718 1.50996e8
   ts '(2: >/\ ])D'
0.146728 1.67792e7

R.E. Boss

-----Oorspronkelijk bericht-----
Van: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Namens John Randall
Verzonden: vrijdag 24 maart 2006 13:54
Aan: Programming forum
Onderwerp: Re: [Jprogramming] Closest local minimums of data

I am aware of 2 >/\ ], but I tend to use }:>}. for prototyping and small
arrays, since I can accurately read and write it without looking anything
up.  Of course there is a performance penalty for large arrays, since
}:>}. must create two intermediate arrays of size n-1 as well as the
result.

Best wishes,

John

Mike Day wrote:
> As you noted,  John Randall's }: > }. is of interest.
> 2 >/\ ] is a natural J/APL2 way to do it, whereas }: > }. is the J
> form of an ancient APL1 idiom for first differences and the like,
> and seems faster for smallish d, but loses out for your required
> size of vector for space requirement. However,  the performance
> is pretty good with either idiom.
>
>    ts =: 6!:2 , 7!:[EMAIL PROTECTED]  NB. time & space
>
>    D=:10000$d     NB. "old" method faster
>    ts'((1,2>/\]);@(<&(<./\);. 1)])D '
> 0.000238578 85248
>    ts'((1,}:>}.);@(<&(<./\);. 1)])D '
> 0.000155048 150464
>
>    D=:50000$d     NB. both similar for time
>    ts'((1,2>/\]);@(<&(<./\);. 1)])D '
> 0.00151164 331008
>    ts'((1,}:>}.);@(<&(<./\);. 1)])D '
> 0.00151807 592832
>
>    D=:100000$d    NB. "new" method faster
>    ts'((1,2>/\]);@(<&(<./\);. 1)])D NB. tacit form'
> 0.00302441 658688
>    ts'((1,}:>}.);@(<&(<./\);. 1)])D NB. tacit form'
> 0.00445364 1.18266e6
>
> Mike
>
>
> Mikl Kurkov wrote:
>
>> On Fri, 24 Mar 2006 02:43:00 +0300, Mike Day
>> <[EMAIL PROTECTED]>  wrote:
>>
>>> I was drafting this before Oleg's reply arrived.  It's slightly
>>> different from his, and shows a derivation of a tacit form.
>>> ==============================================================
>>> Is this the sort of thing you need? Consider:
>>
>> Yes, exactly.
>>
>>>    d
>>> 10 7 5 6 7 1 9 8 2 4
>>>    (1 , 2 >/\ ])d NB. boolean for = left > right for each pair ?
>>> 1 1 1 0 0 1 0 1 1 0
>>>
>>>    1 1 1 0 0 1 0 1 1 0 < ;. 1 d  NB. partition d by this boolean
>>> +--+-+-----+---+-+---+
>>> |10|7|5 6 7|1 9|8|2 4|
>>> +--+-+-----+---+-+---+
>>>    1 1 1 0 0 1 0 1 1 0(<&(<./\);. 1)d NB. required work in boxes
>>> +--+-+-----+---+-+---+
>>> |10|7|5 5 5|1 1|8|2 2|
>>> +--+-+-----+---+-+---+
>>>
>>>    1 1 1 0 0 1 0 1 1 0 ;@(<&(<./\);. 1)d NB. unbox
>>> 10 7 5 5 5 1 1 8 2 2
>>>
>>>    ((1,2>/\]);@(<&(<./\);. 1)])d NB. tacit form
>>> 10 7 5 5 5 1 1 8 2 2
>>>
>>>    (;@(<&(<./\);. 1)~1,2>/\])d  NB. tacit avoiding one "]" 10 7 5 5 5
>>> 1  1 8 2 2
>>>
>>> Mike
>>
>>
>> Thanks for explanations. Your version seems to be most efficient.
>>
> ----------------------------------------------------------------------
> 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

Reply via email to