我想找到二维数组的局部最大值,但仅限于一维。即:
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”(驻点)的区别
最佳答案
您可以通过对每一行应用有限差分梯度并检查符号变化来解决此问题。 然而,不清楚在边界做什么。
关于python - 二维数组一维中的 Numpy 局部最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29144921/