[Numpy-discussion] isn't it a bug? (matrix multiplication)

Christopher Barker Chris.Barker at noaa.gov
Thu Feb 7 14:10:16 EST 2008


Alan G Isaac wrote:
> On Thu, 07 Feb 2008, dmitrey apparently wrote:
>> a = array((1.0, 2.0))
>> e = array(15)
>> e *= a # ... yields error:
> 
> You are trying to stuff in two values where
> you have only allocated space for 1.

Exactly. but to expound a bit more:

The ?= operators are in-place operators -- they attempt to modify the 
left hand side in-place. The regular math operators create a new array, 
which can be a different size than either of the two operands, thanks to 
"array broadcasting".

x *= y should be the same as x = x*y iff the size of x*y is the same 
size as x.

That's why:

 >>> e
array(15)
 >>> a
array([ 1.,  2.])

 >>> e*=a
fails, but:

 >>> a*=e
 >>> a
array([ 15.,  30.])

works.

One more note: you're doing element-wise array multiplication, not 
matrix multiplication -- a distinction that does matter sometimes.

-Chris

-- 
Christopher Barker, Ph.D.
Oceanographer

Emergency Response Division
NOAA/NOS/OR&R            (206) 526-6959   voice
7600 Sand Point Way NE   (206) 526-6329   fax
Seattle, WA  98115       (206) 526-6317   main reception

Chris.Barker at noaa.gov



More information about the NumPy-Discussion mailing list