python - 二维数组一维中的 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 = 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/

相关文章:

python - 过滤一组以匹配字符串排列

python - *矢量化*方法来查找每列的最小值索引(不包括所有已找到的索引)

python - Numpy ValueError 将元组列表广播到数组中

Python排列递归

python - 如何使用 pywikibot 登录 wikidata

java - 需要帮助了解程序的执行

c# - 如何水平打印数组的内容?

javascript - 如何编写 XML 数据二维数组

python - 这个 numpy 高级索引代码是如何工作的?

python - 带有 Pandas 时间戳的 Matplotlib 条形图