我有速度数据,因为我需要检测阈值大于20且谷值大于0的值。我使用此代码进行峰值检测,但出现索引错误
import numpy as np
from scipy.signal import find_peaks, find_peaks_cwt
import matplotlib.pyplot as plt
import pandas as pd
import sys
np.set_printoptions(threshold=sys.maxsize)
zero_locs = np.where(x==0)
search_lims = np.append(zero_locs, len(x)) # limits for search area
diff_x = np.diff(x)
diff_x_mapped = diff_x > 0
peak_locs = []
x = np.array([1, 9, 18, 24, 26, 5, 26, 25, 26, 16, 20, 16, 23, 5, 1, 27,
22, 26, 27, 26, 25, 24, 25, 26, 3, 25, 26, 24, 23, 12, 22, 11, 15, 24, 11,
26, 26, 26, 24, 25, 24, 24, 22, 22, 22, 23, 24])
for i in range(len(search_lims)-1):
peak_loc = search_lims[i] + np.where(diff_x_mapped[search_lims[i]:search_lims[i+1]]==0)[0][0]
if x[peak_loc] > 20:
peak_locs.append(peak_loc)
fig= plt.figure(figsize=(10,4))
plt.plot(x)
plt.plot(np.array(peak_locs), x[np.array(peak_locs)], "x", color = 'r')
我尝试使用峰值检测算法,但它无法检测峰值高于20的峰值。我需要检测x值为0且峰值为20 expected output: the marked peaks has to be detected的峰值。通过运行上述脚本,我得到了此错误
IndexError: arrays used as indices must be of integer (or boolean) type
如何获得乘坐此错误的任何建议,感谢问候
1条答案
按热度按时间58wvjzkj1#
未找到峰值。即
len(peak_locs)
为零。因此,最后得到的是这个数组,其类型默认为float:
去修?找更多的山峰!