[Numpy-discussion] Multiple assignment confusion

Benjamin Schwartz bens at MIT.EDU
Sun Nov 16 19:53:02 CST 2003


I am trying to interchange two pieces of an array.  Here is my demo code:

 >>> from Numeric import *
 >>> a=array([.7,.1,.1,.1])
 >>> a=multiply.outer(a,a)
 >>> a=multiply.outer(a,a)
 >>> sum(sum(sum(sum(a))))
1.0000000000000002
 >>> a[1,0],a[1,1]=a[1,1],a[1,0]
 >>> sum(sum(sum(sum(a))))
0.93999999999999972

So a is a four-dimensional array that sums to 1, but when I attempt to 
switch two 2-d sub-arrays of it I just end up duplicating one of them, 
shown by a change in the value of the sum (to .94).  Is this behavior 
deliberate?  It certainly seems to break Python's tuple-assignment model.

What I would ideally like to do is perform this swap without more than 
two-elements'-worth of temporary storage.  I.e. perform it as a pure 
reference swap or switch each pair of elements one by one, reusing 
temporary space.  Is this possible with Numeric (or Numarray?)?

Curious,
Ben





More information about the Numpy-discussion mailing list