【发布时间】:2019-03-14 11:48:11
【问题描述】:
我有点挣扎 find_peaks...
我将三次样条应用于一些数据,我想从中提取一些峰值。但是,数据可能有几个峰值,而我只想要两个最大的。我可以找到山峰
peak_data = signal.find_peaks(spline, height=0.3, distance=50)
我可以使用它来获取 peak_data 内索引点的 x 和 y 值
peak_vals = spline[peak_data[0]]
time_vals = xnew[peak_data[0]] # xnew being thee splined x-axis
我想我可以订购peak_vals 并保留前两个值(即最高和第二高峰),然后使用它从xnew 中获取与这些值一致的时间。但是,我无法使用返回的.sort
AttributeError: 'tuple' object has no attribute 'sort'
或返回的sorted()
TypeError: '>' not supported between instances of 'int' and 'dict'
我认为这是因为它是从 Numpy 数组(样条数据)中索引的,因此会创建另一个 numpy 数组,然后该数组中的任何一个排序命令都不起作用。
我能做到的最好的办法是遍历一个新列表,然后从中获取前两个值:
peak_val1=[]
peak_vals = spline[peak_data[0]]
for i in peak_val_d:
peak_val1.append(i)
peak_val1.sort(reverse=True)
peak_val2 = peak_val1[0:2]
这可行,但考虑到我仍然需要索引时间值,这似乎是一种非常冗长的方法。我确定一定有更快(更简单)的方法?
补充说明:我意识到 find_peaks 返回一个索引列表,但它实际上似乎包含索引和最大值和数组字典? (对不起,我对python很陌生,花括号意味着字典,但它看起来不像一个简单的字典)。无论如何...print(peak_data) 返回索引位置及其值。
(array([ 40, 145, 240, 446]), {'peak_heights': array([0.34588031, 0.43761898, 0.45778744, 0.74167977])})
有没有办法直接访问这些数据?
【问题讨论】:
标签: arrays python-3.x numpy scipy