Skip to main content
 首页 » 编程设计

Python:在多种条件下查找数组的索引

2025年05月04日10shangdawei

我有以下问题。有两个 n 维整数数组,我需要确定满足多个条件的项目的索引。

  • 索引应该在“array1”中有一个负元素。
  • 在这个包含负元素的子集中,它应该在“array2”中具有最小值。
  • 如果出现平局,则选择“array1”中具有最小值的值(否则为第一个)

假设我们有:

array1 = np.array([1,-1,-2]) 
array2 = np.array([0,1,1]) 

然后它应该返回索引 2(第三个数字)。我正在尝试按如下方式进行编程:

import numpy as np 
n = 3 
array1 = np.array([1,-1,-2]) 
array2 = np.array([0,1,1]) 
indices = [i for i in range(n) if array1[i]<0]  
indices2 = [i for i in indices if array2[i] == min(array2[indices])]  
index = [i for i in indices2 if array1[i] == min(array1[indices2])][0] #[0] breaks the tie. 

这似乎可行,但是,我觉得它不是很优雅。在我看来,您似乎应该能够在一两行中完成此操作,并且定义的新变量更少。有人有改进的建议吗?提前致谢。

请您参考如下方法:

你可以从 array1 中获取所有负元素的索引:

np.where(array1 < 0) 

然后您可以通过以下方式访问该子集:

subset = array2[array1 < 0] 

要获取array1的最小(负)值的索引,可以使用array1.argmin()

value = array2[array1.argmin()] 

将所有内容放在一起可以得到:

value = array2[array1 < 0][array1[array1 < 0].argmin()] 

但如果 array1 只有正值,则必须捕获 ValueErrors。