我可以得到非零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]))
但是,我想知道如果没有编写循环,是否有更好的方法可以做到这一点。
答案 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中的元组列表。
对于您的情况,您可以尝试