2016-04-16 57 views
0

我有一個包含1024個元素的列表。我想檢查我確定的間隔之間的列表的最大值。找到特定間隔列表的最大值的最快方法

例如X是我的列表,它是numpy數組形式。然後;

if np.amax(X[0:31]) > 200: 
    print("1") 
elif np.amax(X[0:31]) < 200: 
    print("1a") 

if np.amax(X[32:63] > 200: 
    print("2") 
elif np.amax(X[32:63] < 200: 
    print("2a") 

如果 - elif語句直到X [992:1023]。這意味着有16個間隔和16個if-elif語句。有沒有更有效的方法來做到這一點?

編輯:謝謝你的回答。但問題有點不同。讓我試着用一個例子來解釋它。這些間隔的每個結果都點亮一個LED。有16個間隔和16個不同的LED。更多的最大值界限有3層。我沒有提到它。但是諸如(最大爲200),(200>最大爲< 500),(最大> 500)。這有點複雜。

回答

1

那麼,對於這樣的定期間隔,標準的for-loop應該這樣做。對於初學者來說,這將工作:

for x in xrange(0, 1024, 32): # 0, 32, 64, ... , 992 
    m = np.amax(X[x:x+32]) 
    if m > 200: 
     print(str(x/32 + 1)) # 1, 2, 3, ... , 32 (not 16) 
    elif m < 200: 
     print(str(x/32 + 1) + 'a') # 1a, 2a, 3a, ... 

我假設你想在第一時間間隔指數31。您的代碼將省略索引31,63等。

+0

感謝您的回答。但問題有點不同。讓我試着用一個例子來解釋它。這些間隔的每個結果都點亮一個LED。有16個間隔和16個不同的LED。更多的最大值界限有3層。我沒有提到它。但是如(最大爲<200), (200> max <500), (max > 500)。這有點複雜。 – Reactionic

0

您可以根據您的間隔將矩陣重塑爲二維矩陣,並在特定軸上使用最大值函數。

interval = 32 
Xnew = X.reshape(interval, len(X)/interval) 
print np.max(Xnew, axis=1) # This is an array of the max values of each consecutive interval range in X 
相關問題