在 1D numpy 数组中使用 Numpy 查找局部最大值/最小值

新手上路,请多包涵

你能推荐一个来自 numpy/scipy 的模块函数,它可以在一维 numpy 数组中找到局部最大值/最小值吗?显然,最简单的方法是查看最近的邻居,但我希望有一个可以接受的解决方案,它是 numpy 发行版的一部分。

原文由 Navi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

如果您正在寻找一维数组中的所有条目 a 小于它们的邻居,您可以尝试

numpy.r_[True, a[1:] < a[:-1]] & numpy.r_[a[:-1] < a[1:], True]

您还可以在此步骤之前使用 numpy.convolve() 平滑 您的阵列。

我认为没有专门的功能。

原文由 Sven Marnach 发布,翻译遵循 CC BY-SA 3.0 许可协议

在 SciPy 中 >= 0.11

 import numpy as np
from scipy.signal import argrelextrema

x = np.random.random(12)

# for local maxima
argrelextrema(x, np.greater)

# for local minima
argrelextrema(x, np.less)

产品

>>> x
array([ 0.56660112,  0.76309473,  0.69597908,  0.38260156,  0.24346445,
    0.56021785,  0.24109326,  0.41884061,  0.35461957,  0.54398472,
    0.59572658,  0.92377974])
>>> argrelextrema(x, np.greater)
(array([1, 5, 7]),)
>>> argrelextrema(x, np.less)
(array([4, 6, 8]),)

请注意,这些是 x 的索引,是局部最大值/最小值。要获取值,请尝试:

 >>> x[argrelextrema(x, np.greater)[0]]

scipy.signal 还提供 argrelmaxargrelmin 分别用于查找最大值和最小值。

原文由 danodonovan 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题