我有以下问题。有两个n维整数数组,我需要确定满足多个条件的项目的索引。该索引应在“ array1”中包含一个负数元素。在这个带有负元素的子集中,它的值应该在“ array2”中最小。如果是平局,请选择“ array1”中具有最小值的值(否则,请选择第一个)因此,假设我们有:array1 = np.array([1,-1,-2])array2 = np.array([0,1,1])然后,它应该返回索引2(第三个数字)。我正在尝试如下编程:import numpy as npn = 3array1 = 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.这似乎可行,但是,我觉得它不是很优雅。在我看来,您应该可以在一两行中定义较少的新变量来完成此操作。有人提出改善建议吗?提前致谢。
3 回答
aluckdog
TA贡献1847条经验 获得超7个赞
我对numpy不太了解(尽管显然我应该认真研究一下),所以这是一个简单的python解决方案
这
sorted([(y, x, index) for (index, (x, y)) in enumerate(zip(array1, array2)) if x < 0])
将为您提供来自array2,array1的元素的三元组,如果是平局,则索引按array2中的值排序,按array1中的值排序,如果平局,则索引
第一个要素是您要寻找的东西。得到以下结果:
[(1, -2, 2), (1, -1, 1)]
因此,索引为2,并通过 [0][2]
潇湘沐
TA贡献1816条经验 获得超6个赞
您可以使用以下命令从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。
至尊宝的传说
TA贡献1789条经验 获得超10个赞
索引在“ array1”中应该有一个负数:
indices_1 = np.argwhere(array1 < 0)
在这个带有负元素的子集中,它的值应该在“ array2”中最小。
indices_2 = array2[indices_1].argmin()
如果是平局,请选择“ array1”中具有最小值的值(否则,请选择第一个)
array1[indices_2].argmin()
添加回答
举报
0/150
提交
取消