[Numpy-discussion] Should dot return 1x1 matrix as scalar?

Travis Oliphant oliphant at ee.byu.edu
Fri Jan 13 09:07:02 EST 2006


Paulo J. S. Silva wrote:

>Ops... You are right. The example is not good. Look this though (now I
>am actually copying my ipython session, instead of "remembering" it):
>
>--- Session copy here ---
>
>In [5]:x = matrix(arange(10.)).T
>In [6]:x = matrix(arange(3.)).T
>In [7]:A = matrix([[1.,2,3],[4,5,6],[7,8,9]])
>In [8]:b = x.T*x*A
>---------------------------------------------------------------------------
>exceptions.ValueError                                Traceback (most
>recent call last)
>
>/home/pjssilva/<console>
>
>/usr/local/lib/python2.4/site-packages/numpy/core/defmatrix.py in
>__mul__(self, other)
>    126             return N.multiply(self, other)
>    127         else:
>--> 128             return N.dot(self, other)
>    129
>    130     def __rmul__(self, other):
>
>ValueError: matrices are not aligned
>
>--- End of copy ---
>
>You see, the inner product can not be used to mutiply by a matrix, which
>is very odd in linear algebra. As the matrix class is supposed to
>represent the linear algebra object we I see two options:
>
>1) Change the __mul__, __rmul__, __imul__ to deal with 1x1 matrices as
>scalars.
>
>2) Change dot to convert 1x1 matrix to scalar at return.
>  
>

or

3)  Return scalars instead of 1x1 matrices inside of __array_finalize__ 
(where the magic of ensuring matrices are rank-2 arrays is actually done).






More information about the NumPy-Discussion mailing list