我编写了一个函数来查看矩阵是否对称:
def issymmetric(mat):
if(mat.shape[0]!=mat.shape[1]):
return 0
for i in range(mat.shape[0]):
for j in range(i):
if (mat[i][j]!=mat[j][i]):
return 0
return 1
它与内置 ndarray 配合得很好,例如numpy.ones:
import numpy as np
a=np.ones((5,5), int)
print issymmetric(a)
以及 numpy 数组:
import numpy as np
a=np.array([[1, 2, 3], [2, 1 , 2], [3, 2, 1]])
print issymmetric(a)
但是当涉及到 numpy 矩阵时:
import numpy as np
a=np.matrix([[1, 2, 3], [2, 1 , 2], [3, 2, 1]])
print issymmetric(a)
它给了我这个错误:
File "issymetry.py", line 9, in issymmetric
if (mat[i][j]!=mat[j][i]):
File "/usr/lib/python2.7/dist-packages/numpy/matrixlib/defmatrix.py", line 316, in __getitem__
out = N.ndarray.__getitem__(self, index)
IndexError: index 1 is out of bounds for axis 0 with size 1
shell returned 1
那是因为没有a[0][1]
a[0]
is matrix([[1, 2, 3]])
. a[0][0]
is matrix([[1, 2, 3]])
也有,但是没有a[0][1]
.
如何在不更改矩阵类型或函数的情况下解决此问题?
一般来说,读取和更新 numpy 矩阵的一个特定单元格的正确方法是什么?