# [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
approach:

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

```