
On Mon, 2004-10-25 at 09:19 -0700, Stephen Walton wrote:
On Mon, 2004-10-25 at 10:26 +0200, Peter Verveer wrote:
I think this may be inefficient, because ravel and flat may make a copy of the data. Also I think using flat/ravel in such a way is plain ugly and a complex way to do it.
You may be right about the copying, I couldn't say.
I just looked at the source (numeric-1.1/Lib/generic.py). The comment to the ravel() function states that it returns a view, not a copy; but it calls reshape() which does make a copy if the input array is not contiguous. I just tested this:
A=arange(25,shape=(5,5)) A.transpose() # now A is not contiguous v=ravel(A) A[2,2]=-17 v # verifies that v did not change.
So, in the above, it does look like ravel() made a copy, and your fears about inefficiency are warranted. Another test shows that changing ravel(A) to A.flat above also results in a copy. Mayhaps we need sumall() after all.