From: Philip A. <pa...@eo...> - 2004-07-07 18:25:23
|
Todd Miller writes: > On Tue, 2004-07-06 at 21:42, Philip Austin wrote: > > (for numpy v1.0 on Mandrake 10 i686) > > My guess is you're talking about numarray here. Please be charitable if > I'm talking out of turn... I tend to see everything as a numarray > issue. Right -- I'm still working through the boost test suite for numarray, which is failing a couple of tests that passed (around numarray v0.3). > All this looks like a documentation problem. The numarray array() > signature has been tortured by Numeric backward compatibility, so there > has been more flux in it than you would expect. Anyway, the manual is > out of date. Here's the current signature from the code: > > def array(sequence=None, typecode=None, copy=1, savespace=0, > type=None, shape=None): > Actually, it seems to be a difference in the way that numeric and numarray treat the copy flag when typecode is specified. In numeric, if no change in type is requested and copy=0, then the constructor goes ahead and produces a view: import Numeric as nc test=nc.array([1,2,3],'i') a=nc.array(test,'i',0) a[0]=99 print test >> [99 2 3] but makes a copy if a cast is required: test=nc.array([1,2,3],'i') a=nc.array(test,'F',0) a[0]=99 print test >>> [1 2 3] Looking at numarraycore.py line 305 I see that: if type is None and typecode is None: if copy: a = sequence.copy() else: a = sequence i.e. numarray skips the check for a type match and ignores the copy flag, even if the type is preserved: import numarray as ny test=ny.array([1,2,3],'i') a=ny.array(test,'i',0) a._data is test._data >>> False It look like there might have been a comment about this in the docstring, but it got clipped at some point?: array() constructs a NumArray by calling NumArray, one of its factory functions (fromstring, fromfile, fromlist), or by making a copy of an existing array. If copy=0, array() will create a new array only if sequence specifies the contents or storage for the array Thanks, Phil |