说我有一个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] == 3
和a[3] == 2
,因此索引{{1 }}。
我当前的解决方案是
3
我不确定是否可以使用numpy使其更有效。任何建议表示赞赏。谢谢。
答案 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]