[NumPy-Tickets] [NumPy] #1980: Matrix A from zeros, after changing values, yields strange A*A.T behavior

NumPy Trac numpy-tickets@scipy....
Mon Nov 14 21:38:10 CST 2011

#1980: Matrix A from zeros, after changing values, yields strange A*A.T behavior
----------------------+-----------------------------------------------------
Reporter:  ehassler  |       Owner:  somebody
Type:  defect    |      Status:  new
Priority:  normal    |   Milestone:  Unscheduled
Component:  Other     |     Version:  1.6.0
Keywords:            |
----------------------+-----------------------------------------------------
Apologies if this is expected behavior, or if dupe.  I searched trac for
"zeros" and "multiply" and found nothing that described this.

I'm making a permutation matrix P, starting with zeros and setting the
1's.  When I do P.T*P or P*P.T I get all 0's back.  But if I multiply P by
an identical matrix manually constructed, or if I use asmatrix to redefine
P as itself, I get the expected behavior (that is, I get an identity
matrix back).  I've included example code at the bottom.

It seems like either one of the following should happen:
- P should zero out everything it's multiplied into and raise errors when
I change a value, forcing it to be all zeros all the time.
- P*P.T = I

import numpy;

P0 = numpy.zeros((6,6),dtype=numpy.float64);
for coord in zip(range(6),(1,3,5,0,2,4)):
P0[coord[0],coord[1]] = 1.;

P1 = numpy.matrix([
[ 0.,  1.,  0.,  0.,  0.,  0.],
[ 0.,  0.,  0.,  1.,  0.,  0.],
[ 0.,  0.,  0.,  0.,  0.,  1.],
[ 1.,  0.,  0.,  0.,  0.,  0.],
[ 0.,  0.,  1.,  0.,  0.,  0.],
[ 0.,  0.,  0.,  0.,  1.,  0.]
], dtype=numpy.float64);

print numpy.all(P0 == P1);  # True

print numpy.all(P0*P0.T == P1*P1.T) # False

print numpy.all(P0*P1.T == P1*P1.T) # True

print numpy.all(P1*P0.T == P1*P1.T) # True

P0 = numpy.asmatrix(P0,dtype=numpy.float64);

print numpy.all(P0*P0.T == P1*P1.T) # True

--
Ticket URL: <http://projects.scipy.org/numpy/ticket/1980>
NumPy <http://projects.scipy.org/numpy>
My example project

More information about the NumPy-Tickets mailing list