Python 一维二维数组的Numpy局部极大值
我想找到二维数组的局部极大值,但只在一维中。即:Python 一维二维数组的Numpy局部极大值,python,arrays,numpy,Python,Arrays,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 =
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”(最大值)与“1333789”(固定点)的区别是什么?您可以通过对每行应用有限差分梯度并检查符号变化来解决此问题。
但是,不清楚在边界处要做什么。您测试过它有多慢吗?是的,一张图像0.8秒答案实际上取决于您手头的数据。一个数据集(图像)内平均有多少相同的最小值?数据集(图像)的大小是多少?