[Numpy-discussion] Re: asarray behaviour
Colin J. Williams
cjw at sympatico.ca
Thu Oct 13 05:02:11 CDT 2005
Chris Barker wrote:
> Travis Oliphant wrote:
>> Chris Barker wrote:
>>> Travis Oliphant wrote:
>>>> 2) new behavior
>>>> array (and asarray) always return an ndarray base-class object (or
>>>> a big-nd array if the object is already one).
>>> +1 ...I think. What is a big-nd array?
>> A big-nd arrary is the parent-class of the ndarray object. It
>> doesn't have the sequence protocols or the buffer protocols and
>> should not suffer from the 32-bit limitations of those protocols.
>> An ndarray inherits from the bigarray. Eventually, when Python cleans
>> up its 32-bit limitations, the bigarray will disappear.
>>>> asanyarray --- returns an nd-array or a sub-class if the object is
>>>> already a sub-class.
>>> What about having each subclass define it's own function-- asmatrix,
>>> etc? Maybe that's not general enough, but I know I use asarray
>>> because I know I want a NumPy Array, and nothing else.
>> I guess the problem is that we are not used to coding to interfaces.
> I'm not sure I get this. If we were coding to an interface, then I'd
> write my functions to jsut expect the type I want, and be done iowth
> it, I wouldn't need asarray().
>> I'm going to make the change suggested by the second point, just
>> because I think it's more explicit and will make porting scipy a lot
> um, I'm not sure I follow...what change are you making?
>> The fact that multiplication could be redefined by the matrix which
>> still passes as an array, means that lots of code can choke on matrices.
> Exactly. What I like about asarray is that I can write a function that
> really does require a NumPy array, and let the user code pass in
> anything that can be turned into one, without any performance penalty
> if a NumPy array is passed in. However, it's very important that I
> know EXACTLY what type asarray will return. The same thing applies to
> matrixes, etc. If I write a function that manipulates a matrix, Iwant
> to be darn sure that's what I've got...I'd need an asmatrix() function
> to give it to me.
I'm puzzled by this. There is already a matrix class which should
construct a matrix instance from a list, tuple or array or any subclass
of array - I haven't tested all of these.
>> Of course, this will have negative consequences. It will make
>> matrices much less pervasive through function calls "automatically",
>> but it will be safer. People who believe their code is safe for
>> matrices, can use asanyarray.
> I can see that there may well be sone code that could take any
> subclass of ndarray..perhaps if it's only accessing the data, for
> instance, so it's nice to have that option.
More information about the Numpy-discussion