gwg*_*gwg 5 python numpy matrix
我想得到矩阵中每列的值索引M
.例如:
M = matrix([[0, 1, 0],
[4, 2, 4],
[3, 4, 1],
[1, 3, 2],
[2, 0, 3]])
Run Code Online (Sandbox Code Playgroud)
在伪代码中,我想做这样的事情:
for col in M:
idx = numpy.where(M[col]==0) # Only for columns!
Run Code Online (Sandbox Code Playgroud)
和有idx
是0
,4
,0
对于每一列.
我试过使用where
,但我不理解返回值,这是一个矩阵元组.
矩阵元组是适合索引的项目的集合。输出将具有索引矩阵(或数组)的形状,输出中的每个项目都将从原始数组中选择,使用第一个数组作为第一维的索引,第二个数组作为第二维的索引,等等。换句话说,这个:
>>> 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]])
Run Code Online (Sandbox Code Playgroud)
这个顺序可能会让你感到困惑。它以扁平化的顺序进行——因此M[0,2]
出现在第二位,而不是第三位。如果您需要重新排序,您可以这样做:
>>> row[0,col.argsort()]
matrix([[0, 4, 0]])
Run Code Online (Sandbox Code Playgroud)
您还可能最好使用数组而不是矩阵。这样你就可以操纵数组的形状,这通常很有用!另请注意ajcr的基于转置的技巧,这可能比使用 更好argsort
。
最后,还有一种方法可以完成与本例nonzero
相同的操作。where
现在使用转置技巧:
>>> (M == 0).T.nonzero()
(matrix([[0, 1, 2]]), matrix([[0, 4, 0]]))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
315 次 |
最近记录: |