Props to numpy programmers!

Duncan Smith buzzard at urubu.freeserve.co.uk
Thu Nov 20 10:10:54 EST 2003


"Andrew Felch" <andrewfelch at yahoo.com> wrote in message
news:9ed149b8.0311191728.117b4566 at posting.google.com...
> So I wanted to matrixmultiply
>
> [[a,b],
>  [c,d]]
>
> *
>
> [e,f]
>
> Of course this is impossible, because the number of columns in the
> first factor is not equal to the number of rows in the second.  Wrong!
>  It is impossible because the second matrix is rank1!  So numpy
> happily converts it to a column vector so the multiplication will
> work, and converts the answer back into a rank1 vector!!!!
>
> I love NUMPY!!!!!!!!!!!
>
> I was reading my code and thought I had a bug, I couldn't figure out
> why the code was still working right!  It's because the numpy people
> are geniouses!
>
> Hooray numpy!!!!!!!!!!  Numpy is smarter than  me!

I love Numpy too. But I wouldn't want this multiplication to work if the
second array was a row vector (and there's no explicit distinction because
of the array's shape).

>>> a
array([[0, 1],
       [2, 3]])
>>> b
array([4, 5])
>>> Numeric.matrixmultiply(a,b)
array([ 5, 23])
>>> Numeric.matrixmultiply(b,a)
array([10, 19])

One of these multiplications should fail, depending on whether b is a column
or row vector.

Make it a column vector by reshaping,

>>> b = Numeric.reshape(b, (2,1))
>>> b
array([[4],
       [5]])

and it does the right thing.

>>> Numeric.matrixmultiply(a,b)
array([[ 5],
       [23]])
>>> Numeric.matrixmultiply(b,a)

Traceback (most recent call last):
  File "<pyshell#60>", line 1, in -toplevel-
    Numeric.matrixmultiply(b,a)
  File "C:\Python23\lib\site-packages\Numeric\Numeric.py", line 335, in dot
    return multiarray.matrixproduct(a, b)
ValueError: matrices are not aligned
>>>

Much safer IMHO.

Duncan







More information about the Python-list mailing list