Numpy从矩阵中提取行,列和值

时间:2014-06-17 10:23:27

标签: python arrays numpy indexing

我有一个矩阵,我想写一个脚本来提取大于零的值,它的行号和列号(因为值属于那个(行,列)),这是一个例子,< / p>

from numpy import *
import numpy as np

m=np.array([[0,2,4],[4,0,4],[5,4,0]])
index_row=[]
index_col=[]
dist=[]

我想在 index_row 中存储行号,在 index_col 中存储列号,在 dist 中存储值。所以在这种情况下,

index_row = [0 0 1 1 2 2]
index_col = [1 2 0 2 0 1]
dist = [2 4 4 4 5 4]

如何添加代码以实现此目标?谢谢你给我建议。

2 个答案:

答案 0 :(得分:4)

您可以使用numpy.where

>>> indices = np.where(m > 0)
>>> index_row, index_col = indices
>>> dist = m[indices]
>>> index_row
array([0, 0, 1, 1, 2, 2])
>>> index_col
array([1, 2, 0, 2, 0, 1])
>>> dist
array([2, 4, 4, 4, 5, 4])

答案 1 :(得分:0)

虽然已经回答了这个问题,但我经常发现np.where有些麻烦 - 尽管所有事情都取决于具体情况。为此,我可能会使用ziplist comprehension

index_row = [0, 0, 1, 1, 2, 2]
index_col = [1, 2, 0, 2, 0, 1]
zipped = zip(index_row, index_col)
dist = [m[z] for z in zipped]

zip将为您提供迭代的元组,可用于索引numpy数组。