我有一个稀疏的二维矩阵,通常是这样的:
test
array([[ 1., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 2., 1., 0.],
[ 0., 0., 0., 1.]])
我对“测试”中的所有非零元素都感兴趣
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
最佳答案
鉴于
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.])