为了账号安全,请及时绑定邮箱和手机立即绑定

Python:在几种情况下查找数组的索引

Python:在几种情况下查找数组的索引

MMTTMM 2021-03-20 23:19:20
我有以下问题。有两个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]


查看完整回答
反对 回复 2021-03-24
?
潇湘沐

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。


查看完整回答
反对 回复 2021-03-24
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

索引在“ array1”中应该有一个负数

indices_1 = np.argwhere(array1 < 0)

在这个带有负元素的子集中,它的值应该在“ array2”中最小。

indices_2 = array2[indices_1].argmin()

如果是平局,请选择“ array1”中具有最小值的值(否则,请选择第一个)

array1[indices_2].argmin()


查看完整回答
反对 回复 2021-03-24
  • 3 回答
  • 0 关注
  • 300 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信