我有以下問題。有兩個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的最?。ㄘ摚┲档乃饕梢允褂胊rray1.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
提交
取消