猿问

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

我有以下问题。有两个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.

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


MMTTMM
浏览 301回答 3
3回答

aluckdog

我对numpy不太了解(尽管显然我应该认真研究一下),所以这是一个简单的python解决方案这sorted([(y,&nbsp;x,&nbsp;index)&nbsp;for&nbsp;(index,&nbsp;(x,&nbsp;y))&nbsp;in&nbsp;enumerate(zip(array1,&nbsp;array2))&nbsp;if&nbsp;x&nbsp;<&nbsp;0])将为您提供来自array2,array1的元素的三元组,如果是平局,则索引按array2中的值排序,按array1中的值排序,如果平局,则索引第一个要素是您要寻找的东西。得到以下结果:[(1,&nbsp;-2,&nbsp;2),&nbsp;(1,&nbsp;-1,&nbsp;1)]因此,索引为2,并通过&nbsp;[0][2]

潇湘沐

您可以使用以下命令从array1获取所有负元素的索引:np.where(array1&nbsp;<&nbsp;0)那么您可以通过以下方式访问该子集:subset&nbsp;=&nbsp;array2[array1&nbsp;<&nbsp;0]要获取array1的最小(负)值的索引,可以使用array1.argmin()value&nbsp;=&nbsp;array2[array1.argmin()]放在一起给你:value&nbsp;=&nbsp;array2[array1&nbsp;<&nbsp;0][array1[array1&nbsp;<&nbsp;0].argmin()]但是如果array1仅具有正值,则必须捕获ValueErrors。

至尊宝的传说

索引在“ array1”中应该有一个负数:indices_1&nbsp;=&nbsp;np.argwhere(array1&nbsp;<&nbsp;0)在这个带有负元素的子集中,它的值应该在“ array2”中最小。indices_2&nbsp;=&nbsp;array2[indices_1].argmin()如果是平局,请选择“ array1”中具有最小值的值(否则,请选择第一个)array1[indices_2].argmin()
随时随地看视频慕课网APP

相关分类

Python
我要回答