[Numpy-discussion] Quick Question about Optimization

James Snyder jbsnyder@gmail....
Tue May 20 20:01:37 CDT 2008


>
> Well, if you do f = a[n, :], you would get a view, another object that
> shares the data in memory with a but is a separate object.

OK, so it is a new object, with the properties of the slice it
references, but if I write anything to it, it will consistently go
back to the same spot in the original array.

In general, if I work on that, and don't do something that allocates a
new set of memory locations for that, it will reference the same
memory location.

If I do:
a = np.zeros((20,30))
b = a[2,:]

b += 1 # will add 1 to the original slice

b.resize will fail...

b = np.zeros((1,30)) # allocates new memory and disconnects the view

The appropriate way to zero out the original memory locations would be
to do something like b *= 0?

Is there any way to force a writeback to the original view so long as
the dimensions of what is being assigned to b is the same as the
original? Or, is there a way to, say, enable a warking if I'm dropping
a view?

> Sorry I didn't get back to you earlier on this -- I was a bit busy
> yesterday.  It looks like weave.blitz isn't working on your second
> line because you're not explicitly putting slices in some of the
> dimensions,  In numpy v[0:2] works for 1,2,3,4,.... dimensions, but
> for a 2d array in blitz you have to use v[0:2,:], 3d v[0:2,:,:].  It's
> a bit more picky.   I think that's the problem with your second line
> -- try replacing v[:] with v[0,:] and theta[1-curidx] with
> theta[1-curidx, :]. (I may have missed some others.)

OK, that seems to do it.  I still actually get better performance
(subsequent runs after compilation) with the straight numpy code.
Strangely, I'm also getting that the flip/flop method is running a bit
slower than having the separate prev_ variables.  aff_input is rather
large (~2000x14000), but the state vectors are only 14000 (or that x2
w/ flipflopping for some), each.

Is there slowdown maybe because it is doing those 3 lines of blitz
operations then doing a bunch of python numpy?

Either way, It seems like I've got pretty good performance as well as
a handle on using weave.blitz in the future.

-jsnyder


-- 
James Snyder
Biomedical Engineering
Northwestern University
jbsnyder@gmail.com
PGP: http://fanplastic.org/key.txt


More information about the Numpy-discussion mailing list