python:创建numpy非零索引,值对

时间:2015-07-22 14:15:52

标签: python arrays numpy

我可以得到非零numpy数组的索引,如下所示:

a = np.array([0., 1., 0., 2.])
i = np.nonzero(a)

返回(array([1, 3]),)。我可以得到相应的值:

v = a[i]

现在我要做的是创建一个包含每个(index, value)元组的列表。我想一种方法是编写一个for循环,如下所示;

l = list()
for x in range(0, len(v)):
    l.append((i[0][x], v[x]))

但是,我想知道如果没有编写循环,是否有更好的方法可以做到这一点。

3 个答案:

答案 0 :(得分:2)

如果真的想要元组,你可以通过以下方式获取它们:

indexes= np.where(a!=0)[0]   #or np.nonzero(a)[0]
values=a[indexes]
zip(values, indexes)         #or list(zip(values, indexes)) in python 3, if you need to access more than once

答案 1 :(得分:1)

您可以使用列表理解

l = [(x, v[x]) for x in i[0]]

或使用zip作为其他答案建议

答案 2 :(得分:0)

我不确定numpy是否有一个库可以执行此操作,但您可以使用zip()函数执行此操作。示例 -

>>> i = [1,2,3,4]
>>> v = [5,6,7,8]
>>> list(zip(i,v))
[(1, 5), (2, 6), (3, 7), (4, 8)]

对于Python 2.x,您不需要list(),因为zip会返回Python 2.x中的元组列表。

对于您的情况,您可以尝试