|
From: Travis O. <oli...@ee...> - 2006-01-13 17:06:22
|
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). |