I believe that optimization is happening behind the scenes. See the following
tests actually timing indexed assignment, first without replacing the original
array and then replacing the original array:
ts=: 6!:2 , 7!:2@]
a=:i.1e6
ts'_777 (2 9 43556)}a'
0.0238083 8.39078e6
ts'a=:_777 (2 9 43556)}a'
1.00571e_5 2432
On 1/6/2012 9:54, Blake McBride wrote:
> Greetings,
>
> Going through J I found that:
>
> x=:1+i.5
> x
> 1 2 3 4 5
> 44 (2}) x
> 1 2 44 4 5
> x
> 1 2 3 4 5
>
> It seems that J doesn't actually make an indexed assignment. It seems
> more like it creates a copy of the array with the specified
> modifications. This is actually quite shocking. Index assignment to
> a very large array in most languages is a very fast and simple
> operation. It is also very memory efficient. Creating a modified
> copy of a very large array has a much, much greater time and space
> cost. Further, multiplying this (unnecessary) cost over a great
> number of operations can drastically (and unnecessarily) affect
> performance negatively.
>
> Am I missing something here?
>
> Thanks.
>
> Blake McBride
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm