在数据边界寻找峰值

Dan*_*ick 5 python numpy scipy

我想使用 scipy.signal.find_peaks 来查找某些 2D 数据中的峰值,但该函数默认忽略所有边缘峰值(出现在数组左侧或右侧边界上的峰值)。有没有办法在结果中包含边缘峰值?

例如,我想要这个代码:

find_peaks([5,4,3,3,2,3])
Run Code Online (Sandbox Code Playgroud)

生产

[0,5]
Run Code Online (Sandbox Code Playgroud)

而是它产生

[]
Run Code Online (Sandbox Code Playgroud)

erd*_*ant 1

findpeaks 库可以检测边缘。

pip 安装 findpeaks

例子:

X = [5,4,3,2,1,2,3,3,2,3,2,4,5,6]
# initialize with smoothing parameter
fp = findpeaks(lookahead=1, interpolate=5)
# fit
results=fp.fit(X)
# Plot
fp.plot()

# Print the xy coordinates.
# The first and last one in the array are the edges.
print(results['df'])

# x  y  labx    valley  peak    labx_topology   valley_topology peak_topology
# 0  5  1.0 True    False   1.0 True    True
# 1  4  1.0 False   False   1.0 False   False
# 2  3  1.0 False   False   1.0 False   False
# 3  2  1.0 False   False   1.0 False   False
# 4  1  1.0 True    False   1.0 True    False
# 5  2  2.0 False   False   2.0 False   False
# 6  3  2.0 False   True    2.0 False   True
# 7  3  2.0 False   False   2.0 False   False
# 8  2  2.0 True    False   2.0 True    False
# 9  3  3.0 False   True    3.0 False   True
# 10 2  3.0 True    False   3.0 True    False
# 11 4  4.0 False   False   4.0 False   False
# 12 5  4.0 True    False   4.0 True    False
# 13 6  4.0 False   False   4.0 False   True
Run Code Online (Sandbox Code Playgroud)

拟合是在平滑向量上完成的: 平滑向量

最终结果被投影回原始向量: 输入图像