[Numpy-discussion] Vectorizing array updates
Daniel Yarlett
daniel.yarlett@gmail....
Wed Apr 29 08:03:00 CDT 2009
Hi All,
I'm coding an iterative algorithm which needs to update a results
array on each iteration. I have several (one-dimensional) arrays, and
currently I have the following non-vectorized code which gets called
at the end of each iteration (Inds, Current, and Update are all one-
dimensional and the same size):
for i in xrange(Indices.size):
Current[Indices[i]] += Update[i]
This is running too slowly, and so I am going through the usual
process of attempting to vectorize this code (Indices.size > 5000). My
attempt at vectorizing this was:
Current[Indices] += Update
But this does not yield the same result. Here's a simple example.
First the iterative version:
>>> Current = zeros(2,'d')
>>> Update = ones_like(Current)
>>> Indices = zeros(2,'i')
>>> for i in xrange(Indices.size):
... Current[Indices[i]] += Update[i]
...
>>> Current
array([ 2., 0.])
And then my vectorized attempt:
>>> Current = zeros(2,'d')
>>> Update = ones_like(Current)
>>> Indices = zeros(2,'i')
>>> Current[Indices] += Update
>>> Current
array([ 1., 0.])
As you can see, Current is different in the two cases. Any ideas how I
can recreate the behavior of the iterative process in a more numpy-
friendly, vectorized (and hopefully quicker) way? And possibly also
about why my intuitions concerning the semantics of the vectorized
code are wrong?
Many thanks,
Dan.
More information about the Numpy-discussion
mailing list