python - find_peaks 未识别阵列开头的峰值

标签 python numpy scipy vectorization

我试图找到一种矢量化方法来查找数组中的第一个位置,其中的值不会高于 n 个先前数字的最大值。我想过使用 scipy.signal 的 find_peaks 方法来查找局部最大值。我认为如果你定义距离,假设 10 n 是 10,那么它确实如此。但不幸的是,距离的条件必须在两个方向上都满足 - 以前的和即将到来的数字。有没有其他方法或方法可以找到这样的东西?

示例:

arr1 = np.array([1.        , 0.73381293, 0.75649351, 0.77693474, 0.77884614,
       0.81055903, 0.81402439, 0.78798586, 0.78839588, 0.82967961,
       0.8448    , 0.83276451, 0.82539684, 0.81762916, 0.82722515,
       0.82101804, 0.82871127, 0.82825041, 0.82086957, 0.8347826 ,
       0.82666665, 0.82352942, 0.81270903, 0.81191224, 0.83180428,
       0.84975767, 0.84044236, 0.85057473, 0.8394649 , 0.80000001,
       0.83870965, 0.83962262, 0.85039371, 0.83359748, 0.84019768,
       0.83281732, 0.83660132])

from scipy.signal import find_peaks
peaks, _ = find_peaks(arr1, distance=10)

在这种情况下,它会找到位置 10 和 27。但位置 0 也有 10 个不高的后续元素。我怎样才能找到那些?

最佳答案

不幸的是, find_peaks() 通过比较相邻值来工作 - 因此不会识别出现在阵列开头或结尾的峰值。一种解决方法是使用 np.concatenate() 在开头和结尾插入数组的最小值,然后从 peaks 变量中减去 1:

>>> import numpy as np
>>> peaks, _ = find_peaks(np.concatenate(([min(arr1)],arr1,[min(arr1)])), distance=10)
>>> peaks-1
array([ 0, 10, 27], dtype=int64)

关于python - find_peaks 未识别阵列开头的峰值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60095973/

相关文章:

python |删除阵列中的镜像对

python - 堆叠具有一个不同维度的多维 numpy 数组

python - 使用 imshow 校正轴

python - TensorFlow python : Accessing individual elements in a tensor

python - 具有 NA 的两列的条件最小值

包中的 Python C 扩展 - 不起作用?

python - 使用 Matplotlib 平滑等值线图中的数据

image - scipy.misc 图像函数(例如 imread、imresize、imsave、imshow 等)上的 AttributeError、ImportError

python - 扭曲的名称和 srv 记录

python - 有没有办法用 Python 控制窗口?