These timings, for the most part, are not comparable.

You have four expressions and three different results. So only two of
the four timings can be meaningfully compared.

-- 
Raul


On Thu, Feb 25, 2016 at 5:49 PM, Pascal Jasmin <[email protected]> wrote:
>> 5 timespacex ' +/ (i. 250000 4), 1 2 3 4'
>> 0.0200582 2.51692e7
>> 5 timespacex '(i. 250000 2) + reduceS 1 2 3 4'
>> 0.0205952 2.51699e7
>
> for that first expression, there are no fills, but 1m cells appended.
>
> the 2nd expression (equal speed) does 250000 row reshapes
>
>
>
>> 5 timespacex '(i. 250000 2) + reduceC [ 1 2 3 4'
> 0.0224864 2.517e7
>
>
> this expression fills with 0s each row of x.
>
>> 5 timespacex '(i. 250000 4) + reduceC [ 1 2 3 4'
> 0.019306 2.517e7
>
>
> equivalent to first expression.  No fills needed.  Should be just as fast.
>
>
> ____
> But wouldn't timings involving reduce-with-fill depend on how much
> fill needs to get generated?
>
> Thanks,
>
>
>
> On Thu, Feb 25, 2016 at 4:51 PM, Pascal Jasmin <[email protected]> wrote:
>> a couple of implementations I have posted before for u/ when x items and 
>> initial y are of different shape.
>>
>> reduce =: 1 : '<"_1@[ ([: u (&.>)/(>@:) ,) <@:]'
>> reducE =: 1 : (':'; 'o=. y for_i. x do. o =. i u o end.')
>>
>> reducE is explicit, and left to right.  reduce boxes each side, and uses the 
>> same right to
>> left order as /.  reduce is 2-3x faster for +
>>
>> There's an even faster method, but before I mention it, I'd like to go over 
>> how the rank 0 operators work in J
>>
>> (1 + 1 2 3 4) -: 1 1 1 1 + 1 2 3 4
>>
>> `a scalar u"0 a_larger_shape` gets expanded to match the larger shape, and 
>> its result is identical to the operation with the "pre-expanded" shape.
>>
>> 1 2 + 1 2 3 4 is rank error.
>>
>> But there are a couple of obvious expansions that would not create an error
>>
>> 1 2 1 2 + 1 2 3 4 or
>> 1 2 0 0 + 1 2 3 4
>>
>> note that this is not an error
>>
>> 1 2 + i.2 2 but the result (with shape ommitted) is identical to
>>
>>
>> 1 1 2 2 + 0 1 2 3
>>
>> The new reduce adverb is at its core a conjunction.  Where one of its verbs 
>> is how to expand the x items such that they are similar (or compatible) 
>> shape to y.
>>
>> reduceC =: 2 : 'u/@:(v , ])'
>> reduceS =:  reduceC ($@] $"1 _1 [)
>>
>> reduceS is an adverb that generically expands (i.2 2) + reduceS 1 2 3 4 to
>>
>> +/ 0 1 0 1 , 2 3 2 3 ,: 1 2 3 4
>>
>> which may be better than an error, but is unusual, and so the conjunction 
>> version is useful to taylor the expansion as you prefer.
>>
>> some custom applied conjunctions
>>
>> reduceC ($@] {.!._"1 _1 [) NB. take with fill set to _ to match shape of y.
>> reduceC ($@] {. 2 # [) NB. expand 1 2 to 1 1 2 2,
>>
>> NB. but make sure there are 4 items (end matches shape of y)
>>
>> 5 timespacex ' +/  (i. 250000 4), 1 2 3 4'
>> 0.0200582 2.51692e7
>> 5 timespacex '(i. 250000 2) + reduceS 1 2 3 4'
>> 0.0205952 2.51699e7
>> 5 timespacex '(i. 250000 2) + reduceC (2 #"1 [) 1 2 3 4'
>> 0.0231547 2.51707e7
>>
>> 5 timespacex '(i. 250000 2) + reduce 2 2 $ 1 2 3 4'
>> 0.134078 4.66376e7
>>
>>
>> 5 timespacex '(i. 1000000) + reduce  1 2'
>> 0.563169 1.61364e8
>> 5 timespacex '(i. 1000000) + reduceS  1 2'
>> 0.0407191 4.1947e7
>>
>>
>>
>> another technique that is pretty funny how its fast, but works well 
>> especially when y is a string, and x is not, is to convert everything to 
>> strings (using linear representations of x, lets you have x items with 
>> widely varying shapes)
>>
>> NB. swaps 2 items described by x in y.
>> amV  =: (0 {:: [)`(1 {:: [)`]}
>>
>> swap =: (((0 { [) ;~ ]  {~  1 { [) amV ] amV~  (1 { [) ;~ ]  {~  0 { [)
>>
>>
>> timespacex '(52 | i. 2000 2) swap reduce Alpha_j_'
>> 0.0180793 412160
>>
>> timespacex '(":("1) 52 | i. 2000 2) (".@[ swap ])/ Alpha_j_'
>> 0.00243008 2.32998e6
>>
>> timespacex '(52 | i. 2000 2) swap reduceC ([) i.52'
>> 0.0193757 2.2007e6
>>
>> a [ for v argument to reduceC is same as prepending to y and letting it 
>> fill.  The swap function accesses x parameters by index and so it is 
>> harmless to expand it.
>> ----------------------------------------------------------------------
>> 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

Reply via email to