我有两个数组x
和y
作为:
x = np.array([6, 3, 5, 2, 1, 4, 9, 7, 8])
y = np.array([2, 1, 3, 5, 3, 9, 8, 10, 7])
我发现局部极小值和极大值的指数如下:
sortId = np.argsort(x)
x = x[sortId]
y = y[sortId]
minm = np.array([])
maxm = np.array([])
while i < y.size-1:
while(y[i+1] >= y[i]):
i = i + 1
maxm = np.insert(maxm, 0, i)
i++
while(y[i+1] <= y[i]):
i = i + 1
minm = np.insert(minm, 0, i)
i++
这段代码有什么问题?
答案应该是minima = [2, 5, 7]
的索引
以及maxima = [1, 3, 6]
的。
这样就行了。
Python使用
+=
,而不是++
。在while循环中使用
i
之前,必须分配一些值(在本例中为0),这样初始化它以避免出错。minm
和maxm
分别包含最小和最大索引。您根本不需要这个
while
循环。下面的代码将为您提供所需的输出;它将查找所有本地最小值和所有本地最大值,并将它们分别存储在minm
和maxm
中。请注意:当你把这个应用到大数据集时,首先要确保信号平滑,否则你将得到大量的极值。这应该比上面的循环更有效率。
这个图看起来是这样的;我移动了x值,使它们对应于
minm
和maxm
中返回的索引:从SciPy版本1.1开始,您还可以使用find_peaks:
会屈服
好的是,您现在还可以轻松地设置最小峰值高度(例如8):
注意,现在第一个峰值被排除在外,因为它的高度低于8。
此外,还可以设置峰值之间的最小距离(例如5):
现在,由于中间峰与其他两个峰的距离小于5,因此将其排除在外。
相关问题 更多 >
编程相关推荐