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」(固定點)的區別
你測試過它有多慢嗎? – 2015-03-19 12:46:12
是的,對於一個圖像爲0.8秒 – user2290362 2015-03-19 13:55:56
答案實際上取決於您掌握的數據。在一個數據集(圖像)內有多少個相同的最小值是平均值,數據集(圖像)的大小是多少? – Konstantin 2015-03-19 16:13:27