矩阵元组是适用于索引的项目集合。输出将具有索引矩阵(或数组)的形状,并且输出中的每个项目都将使用第一个数组作为第一维的索引,第二个数组作为第二维的索引,以此类推,从原始数组中选择。换句话说,这样做:
>>> numpy.where(M == 0)
(matrix([[0, 0, 4]]), matrix([[0, 2, 1]]))
>>> row, col = numpy.where(M == 0)
>>> M[row, col]
matrix([[0, 0, 0]])
>>> M[numpy.where(M == 0)] = 1000
>>> M
matrix([[1000, 1, 1000],
[ 4, 2, 4],
[ 3, 4, 1],
[ 1, 3, 2],
[ 2, 1000, 3]])
序列可能使您感到困惑。它按扁平化顺序进行--因此
M [0,2]
出现在第二位而不是第三位。如果您需要重新排序它们,您可以这样做:
>>> row[0,col.argsort()]
matrix([[0, 4, 0]])
您最好使用数组而不是矩阵。这样,您可以操纵数组的形状,这通常很有用!还要注意
ajcr的转置技巧,这可能比使用
argsort
更可取。
最后,在这种情况下,还有一个
nonzero
方法与
where
执行相同的操作。现在使用转置技巧:
>>> (M == 0).T.nonzero()
(matrix([[0, 1, 2]]), matrix([[0, 4, 0]]))
argsort
更好。 - senderle