2016-05-25 71 views
2

我有一個特定的場景,我需要掃描數組的特定部分以獲取該部分的最大值並返回該值的位置到整個陣列。 例如如何從python中的數組的特定部分獲取最大值

searchArray = [10,20,30,40,50,60,100,80,90,110] 

我要掃描部3〜8的最大值,(40,50,60,100,80,90)

,然後返回該值的位置。

在這種情況下,最大值

所以爲100,地點是6

有沒有辦法讓使用python單獨或與幫助OY numpy的

+0

position = searchArray.index(max(ary [3:8]))這裏3是下限,8是上限 –

回答

1

第一片你的清單,然後在max函數使用索引:

searchArray = [10,20,30,40,50,60,100,80,90,110] 
slicedArray = searchArray[3:9] 
print slicedArray.index(max(slicedArray))+3 

這將返回切片數組的索引,加上加beginSlice

+0

這不提供正確的索引值。它應該是原來的列表 –

+0

我指出在最後一行,但我現在更改了代碼 –

+0

@Jan Van非常感謝。這工作完美。 :) –

0

我會做這樣的:

sliced = searchArray[3:9] 
m = max(sliced) 
pos = sliced.index(m) + 3 

我已經將3的偏移量添加到位置,以便爲您提供未修改列表中的真實索引。

+0

非常感謝,這有助於很多 –

-3

我想這就是你想要什麼

maxVal = max(searchArray[3:8]) // to get max element 

position = searchArray.index(max(ary[3:8])) //to get the position of the index 
+0

不回答這個問題,他們想索引 –

+0

希望我編輯的答案是他正在尋找的 –

+0

@GarethWebber:爲什麼它被投票了???? –

1

試試這個...假設你想要在整個列表中的最大值的索引 -

import numpy as np 

searchArray = [10,20,30,40,50,60,100,80,90,110] 

start_index = 3 
end_index = 8 

print (np.argmax(searchArray[start_index:end_index+1]) + start_index) 
+0

這是對此的唯一可接受的答案問題 –

+0

@EelcoHoogendoorn你爲什麼這麼認爲? Numpy在真正龐大的列表中速度並不是特別快,那麼在您看來,這種解決方案相對於其他解決方案的優勢是什麼?請解釋。 –

1

使用enumerate可以獲得一個枚舉的元組列表(實際上它是一個生成器,這意味着它總是隻需要一個內存而不是整個列表),然後使用max自定義比較器功能找到最大的價值:

searchArray = [10,20,30,40,50,60,100,80,90,110] 
lower_bound = 3 # the lower bound is inclusive, i.e. element 3 is the first checked one 
upper_bound = 9 # the upper bound is exclusive, i.e. element 8 (9-1) is the last checked one 

max_index, max_value = max(enumerate(searchArray[lower_bound:upper_bound], lower_bound), 
          key=lambda x: x[1]) 

print max_index, max_value 
# output: 6 100 

See this code running on ideone.com

+0

非常感謝。但使用切片機在這種情況下是有效的,我認爲 –

+0

@D_Wills這種方法也使用切片('[lower_bound:upper_bound]') - 它只是避免再次搜索列表返回'max'的項目只是爲了找到它的索引。相反,我使用'enumerate'生成索引和值的元組,並讓'max'處理它們。這樣它只執行一次迭代並直接返回索引和值。 –

+0

我認爲你的意思是「最大」和最大的價值。 –

0

隨着itemgetter

pos = max(enumerate(searcharray[3:9]), key=itemgetter(1))[0] + 3 
相關問題