From: Todd M. <jm...@st...> - 2004-07-07 19:46:22
|
On Wed, 2004-07-07 at 14:25, Philip Austin wrote: > 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 > OK, I think I see what you're after and agree that it's a bug. Here's how I'll change the behavior: >>> import numarray >>> a = numarray.arange(10) >>> b = numarray.array(a, copy=0) >>> a is b True >>> b = numarray.array(a, copy=1) >>> a is b False One possible point of note is that array() doesn't return views for copy=0; neither does Numeric; both return the original sequence. Regards, Todd |