[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 
>> easier.  
>
>
> 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.
>
> -Chris
>
Colin W.





More information about the Numpy-discussion mailing list