我有一个稀疏的二维矩阵,通常是这样的:
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
答案 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]
实现这一点。