2015-03-19 65 views
2

我想找到二維陣列的局部最大值,但只能在一維中找到。即:2D陣列一維中的Numpy局部最大值

1 2 3 2 1 1 4 5 6 2 
2 2 3 3 3 2 2 2 2 2 
1 2 3 2 2 2 2 3 3 3 

將返回:

0 0 1 0 0 0 0 0 1 0 
0 0 0 1 0 0 0 0 0 0 
0 0 1 0 0 0 0 0 1 0 

這顯然是微不足道的通過數組迭代來解決,但這是緩慢的,通常是可以避免的。有沒有一個快速的方法來實現這一目標?

編輯: 我已經設計了一個更快的解決方案:

進口numpy的爲NP

testArray = np.array([[1,2,3,2,1,1,4,5,6,2],[2,2,3,3,3,2,2,2,2,2],[1,2,3,2,2,2,2,3,3,3] ]) 

leftShift = np.roll(testArray,1, axis=1) 
rightShift = np.roll(testArray,-1, axis=1) 

Max = ((testArray>leftShift) & (testArray>rightShift))*1 

print(Max) 

將返回:

[[0 0 1 0 0 0 0 0 1 0] 
[0 0 0 0 0 0 0 0 0 0] 
[0 0 1 0 0 0 0 0 0 0]] 

這是除了重複讀數正確的結果。即......「13331」(最大值)與「13333789」(固定點)的區別

+2

你測試過它有多慢嗎? – 2015-03-19 12:46:12

+0

是的,對於一個圖像爲0.8秒 – user2290362 2015-03-19 13:55:56

+0

答案實際上取決於您掌握的數據。在一個數據集(圖像)內有多少個相同的最小值是平均值,數據集(圖像)的大小是多少? – Konstantin 2015-03-19 16:13:27

回答

1

您可以通過對每一行應用有限差分梯度並檢查符號變化來解決此問題。 但是不清楚在邊界上應該做什麼。