Hi, Did you try ravel() instead ? If a copy is not needed, it returns a 1D view of the array.
Matthieu 2007/7/18, Tom Goddard <[EMAIL PROTECTED]>: > > Does taking a slice of a flatiter always make a copy? That appears to > be the behaviour in numpy 1.0.3. > For example a.flat[1:3][0] = 5 does not modify the original array a, > even when a is contiguous. Is this a bug? > > >>> import numpy as n > >>> n.version.version > '1.0.3' > >>> a = n.zeros((2,3), n.int32) > >>> a > array([[0, 0, 0], > [0, 0, 0]]) > >>> b = a.flat[1:3] > >>> b[0] = 5 > >>> b > array([5, 0]) > >>> a > array([[0, 0, 0], > [0, 0, 0]]) > >>> b = None > >>> a > array([[0, 0, 0], > [0, 0, 0]]) > > This behavior does not seem to match what is described in the Numpy book > (Dec 7, 2006 version), section 3.1.3 "Other attributes", page 51: > > "flat > > Returns an iterator object (numpy.flatiter) that acts like a 1-d > version of the array. > 1-d indexing works on this array and it can be passed in to most > routines as > an array wherein a 1-d array will be constructed from it. The new 1-d > array > will reference this array's data if this array is C-style contiguous, > otherwise, > new memory will be allocated for the 1-d array, the UPDATEIFCOPY flag > will be set for the new array, and this array will have its WRITEABLE > flag > set FALSE until the the last reference to the new array disappears. > When the > last reference to the new 1-d array disappears, the data will be > copied over to > this non-contiguous array. This is done so that a.flat effectively > references the > current array regardless of whether or not it is contiguous or > non-contiguous." > > Tom Goddard > UC San Francisco > > _______________________________________________ > Numpy-discussion mailing list > [email protected] > http://projects.scipy.org/mailman/listinfo/numpy-discussion >
_______________________________________________ Numpy-discussion mailing list [email protected] http://projects.scipy.org/mailman/listinfo/numpy-discussion
