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