[Numpy-discussion] vectorizing loops
David Cournapeau
david@ar.media.kyoto-u.ac...
Fri Oct 26 01:44:39 CDT 2007
Gael Varoquaux wrote:
> On Thu, Oct 25, 2007 at 04:16:06PM -0700, Mathew Yeates wrote:
>> Anybody know of any tricks for handling something like
>
>> z[0]=1.0
>> for i in range(100):
>> out[i]=func1(z[i])
>> z[i+1]=func2(out[i])
>
> Something like:
>
> z[0] = 1.
> out = func1(z)
> z[1:] = func2(out[:-1])
This only works if func1 has no side effect on its argument. The problem
boils down to whether the above algorithm is recursive or not (does
z[i+1] needs z[i]). If func1 has no side effect, then your solution is
fine (but then writing the thing as out[i] = func1(z[i]); z[i+1] =
func2(z[i]) is not really intuitive). If func1 has side effect, then you
cannot vectorize easily.
cheers,
David
P.S: IMHO, this is one of the main limitation of numpy (or any language
using arrays for speed; and this is really difficult to optimize: you
need compilation, JIT or similar to solve those efficiently).
More information about the Numpy-discussion
mailing list