在某些情况下如何获取numpy数组索引

时间:2018-09-25 05:43:01

标签: python arrays numpy indexing

我遇到这样的问题: 假设我有这样的数组: 'y', 'x', 'x', 'y', 'x', 'x', 'x' 我需要获取for (let i = 0; i < a.length; i++) { console.log(a[i]); for (let j = 0; j < z.length; j++) { console.log(z[j], z[j+1]); // break? } }的索引,在该位置 a = np.array([[1,2,3,4,5,4,3,2,1],]) label = np.array([[1,0,1,0,0,1,1,0,1],]) 的元素值为1,而a的值是导致label为1的最大值

在上面的示例中,a为1的索引可能是:0、2、5、6、8,因此它们对应的label的值为:1、3, 4、3、1,其中4是大数,因此我需要得到5的结果,它是label中数字4的索引。我如何用numpy做到这一点?

3 个答案:

答案 0 :(得分:3)

获取1s索引,如idx,然后用它索引到a,获取max索引,最后通过索引到{来追溯到原始顺序{1}}-

idx

样品运行-

idx = np.flatnonzero(label==1)
out = idx[a[idx].argmax()]

对于# Assuming inputs to be 1D In [18]: a Out[18]: array([1, 2, 3, 4, 5, 4, 3, 2, 1]) In [19]: label Out[19]: array([1, 0, 1, 0, 0, 1, 1, 0, 1]) In [20]: idx = np.flatnonzero(label==1) In [21]: idx[a[idx].argmax()] Out[21]: 5 作为整数,a作为label0s的数组,我们可以进一步优化,因为我们可以根据范围缩放1s其中的值,就像这样-

a

此外,如果(label*(a.max()-a.min()+1) + a).argmax() 仅具有正数,它将简化为-

a

正整数的时间(label*(a.max()+1) + a).argmax() -

a

答案 1 :(得分:1)

您可以使用掩码数组:

>>> np.ma.masked_where(~label.astype(bool), a).argmax()
5

答案 2 :(得分:1)

这是最简单的方法之一。

>>> np.argmax(a * (label == 1))
5
>>> np.argmax(a * (label == 1), axis=1)
array([5])

Coldspeed的方法可能会花费更多时间。