在Python中打印2D矩阵中的所有非零元素

时间:2015-07-08 09:33:39

标签: python numpy

我有一个稀疏的二维矩阵,通常是这样的:

test
array([[ 1.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  2.,  1.,  0.],
       [ 0.,  0.,  0.,  1.]])

我对" test"

中的所有非零元素感兴趣

index = numpy.nonzero(test)返回一个数组元组,为我提供非零元素的索引:

index 
(array([0, 2, 2, 3]), array([0, 1, 2, 3]))

对于每一行,我想打印出所有非零元素,但跳过所有只包含零元素的行。

我很感激这一点。

感谢您的提示。这解决了这个问题:

>>> test
array([[ 1.,  0.,  0.,  0.],
[ 0.,  0.,  0.,  0.],
[ 0.,  2.,  1.,  0.],
[ 0.,  0.,  0.,  1.]])

>>> transp=np.transpose(np.nonzero(test))
>>> transp
array([[0, 0],
   [2, 1],
   [2, 2],
   [3, 3]])

>>> for index in range(len(transp)):
row,col = transp[index]
print 'Row index ',row,'Col index ',col,' value : ', test[row,col]

给我:

  Row index  0 Col index  0  value :  1.0
  Row index  2 Col index  1  value :  2.0
  Row index  2 Col index  2  value :  1.0
  Row index  3 Col index  3  value :  1.0

2 个答案:

答案 0 :(得分:6)

给出

rows, cols = np.nonzero(test)

你也可以使用所谓的advanced integer indexing

test[rows, cols]

例如,

test = np.array([[ 1.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  2.,  1.,  0.],
       [ 0.,  0.,  0.,  1.]])

rows, cols = np.nonzero(test)

print(test[rows, cols])

产量

array([ 1.,  2.,  1.,  1.])

答案 1 :(得分:2)

使用数组索引:

test[test != 0]

每行(而不是整个矩阵)没有数组操作,因为每行会返回可变数量的元素。你可以使用像

这样的东西
[row[row != 0] for row in test]

实现这一点。