[Numpy-discussion] Detect subclass of ndarray

Alan G Isaac aisaac at american.edu
Sat Mar 24 12:22:36 EDT 2007


>> On Fri, 23 Mar 2007, Charles R Harris apparently wrote: 
>>> the following gives the wrong result: 
>>> In [15]: I = matrix(eye(2)) 
>>> In [16]: I*ones(2) 
>>> Out[16]: matrix([[ 1.,  1.]]) 
>>> where the output should be a column vector. 


> On 3/24/07, Alan G Isaac <aisaac at american.edu> wrote: 
>> Why should this output a column? 
>> I would prefer an exception. 
>> Add the axis if you want it: 
>> I*ones(2)[:,None] 
>> works fine. 


On Sat, 24 Mar 2007, Charles R Harris apparently wrote: 
> Because it is mathematically correct. You can't multiply 
> a vector by a 2x2 matrix and get a 1x2 matrix as the 
> result.


I do not understand:
what do you mean mathematically correct?
What is the space on which this operator is being defined?

In my opinion, it is mathematically meaningless.
Forcing meaning into it is a bad idea.

Just because there is a sloppy convention to call n×1 
matrices and 1×n matrices "vectors" does not mean they are 
not 2d.  They are.  That is *why* matrix multiplication is 
defined for them.

As I suggested, the right thing to do when someone attemps 
matrix multiplication with an object that is not 2d is to 
raise an exception.  The wrong thing to do is to pretend 
than an object without an orientation has one: that is
inherently not explicit and will surely bite someone sooner 
or later, probably sooner.

Cheers,
Alan Isaac





More information about the NumPy-Discussion mailing list