[Numpy-discussion] Detect subclass of ndarray

Colin J. Williams cjw@sympatico...
Sun Mar 25 08:56:09 CDT 2007

Colin J. Williams wrote:
> Alan G Isaac wrote:
>> On Sat, 24 Mar 2007, Charles R Harris apparently wrote: 
>>> Yes, that is what I am thinking. Given that there are only the two 
>>> possibilities, row or column, choose the only one that is compatible with 
>>> the multiplying matrix. The result will not always be a column vector, for 
>>> instance, mat([[1]])*ones(3) will be a 1x3 row vector. 
>> Ack!  The simple rule `post multiply means its a column vector`
>> would be horrible enough: A*ones(n)*B becomes utterly obscure.
>> Now even that simple rule is to be violated??
> It depends whether ones delivers an instance of the Matrix/vector class 
> or a simple array.
> I assume that, in the above A and B represent matrices.
> Colin W.

Postscript:  I hadn't read the later postings when I posted the above.

PyMatrix used the convention mentioned in an earlier posting.  Simply a 
vector is considered as a single row matrix or a single column matrix.

This same approach can largely be used with numpy's mat:

*** Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit 
(Intel)] on win32. ***
 >>> import numpy as _n
 >>> _n.ones(3)
array([ 1.,  1.,  1.])
 >>> a= _n.ones(3)
 >>> a.T
array([ 1.,  1.,  1.])
 >>> _n.mat(a)
matrix([[ 1.,  1.,  1.]])
 >>> _n.mat(a).T
matrix([[ 1.],
         [ 1.],
         [ 1.]])
 >>> b= _n.mat(a).T
 >>> a * b
matrix([[ 3.]])                   #  Something has gone wrong here - it 
looks as though there is normalization under the counter.

In any event, the problem posed by Alan Isaac can be handled with this 

A * mat(ones(3)).t * B can produce the desired result.  I haven't tested it.

Colin W.
>> Down this path lies madness.
>> Please, just raise an exception.
>> Cheers,
>> Alan Isaac

More information about the Numpy-discussion mailing list