numpy:在给定索引数组的情况下,找到具有最小值的数组中元素索引的有效方法

时间:2019-02-28 19:41:04

标签: python python-3.x numpy

说我有一个numpy数组a = np.array([1, 5, 3, 2, 4, 6, 7])。现在,我有另一个numpy数组b = np.array([-1, -2, 3, 2, -1, -3])b的长度小于或等于a。我想在i中找到最小元素的索引a,使得b[i] > 0。因此,在上面的示例中,结果将为3,因为根据b,只有索引2, 3有效,a[2] == 3a[3] == 2,因此索引{{1 }}。

我当前的解决方案是

3

我不确定是否可以使用numpy使其更有效。任何建议表示赞赏。谢谢。

3 个答案:

答案 0 :(得分:1)

这是一种矢量化方式-

In [72]: idx = np.flatnonzero(b>0)

In [73]: idx[a[:len(b)][idx].argmin()]
Out[73]: 3

答案 1 :(得分:0)

您可以使用b中索引的中间结果来稍后获取正确的索引,这是一种方法。

import numpy as np
a = np.array([1, 5, 3, 2, 4, 6, 7])
b = np.array([-1, -2, 3, 2, -1, -3])

indices_to_check = np.where(b > 0)[0]
result = indices_to_check[np.argmin(a[indices_to_check])]
#Output:
3

答案 2 :(得分:0)

一个班轮:

idx = np.argwhere(a==a[:len(b)][b>0].min())[0]

易懂的代码:

shortened_a = a[:len(b)]
filtered_a = shortened_a[b>0]
smallest = filtered_a.min()
indices_of_smallest = np.argwhere(a==smallest)
first_idx = indices_of_smallest[0]