我有两个numpy数组x和y,我用这些值绘制了曲线。现在我想找到x的所有值,其中局部最大值存在于该曲线上。怎么做?
请给出一种方法,使用这些x和y值以及x(或数组x中x值的索引)的值来拟合最佳曲线,其中存在局部最大值。
答案 0 :(得分:0)
我在下面添加了一个简单示例的代码,该示例查找数组的所有局部最小值和所有局部最大值,并分别将它们存储在minVal
和maxVal
中。请注意:将其应用于大型数据集时,请务必先将信号平滑;否则你最终会陷入极端的浪潮。
数据如下;计算出的最小值/最大值分别为[2, 5, 7]
和[1, 3, 6]
:
以下是代码:
import numpy as np
from scipy.signal import argrelextrema
import matplotlib.pyplot as plt
X=np.arange(9)
Y=np.array([ 3, 5, 1, 9, 3, 2, 10, 7, 8])
plt.plot(X,Y)
plt.show()
maxVal = argrelextrema(Y, np.greater) #(array([1, 3, 6]),)
minVal = argrelextrema(Y, np.less) #(array([2, 5, 7]),)
答案 1 :(得分:0)
x=np.array([6,3,5,2,1,4,9,7,8])
y=np.array([2,1,3,5,7,9,8,10,7])
sort_idx = np.argsort(x)
y=y[sort_idx]
x=x[sort_idx]
minm=np.array([],dtype=int)
maxm=np.array([],dtype=int)
length = y.size
i=0
while i < length-1:
if i < length - 1:
while i < length-1 and y[i+1] >= y[i]:
i+=1
if i != 0 and i < length-1:
maxm = np.append(maxm,i)
i+=1
if i < length - 1:
while i < length-1 and y[i+1] <= y[i]:
i+=1
if i < length-1:
minm = np.append(minm,i)
i+=1
print minm,maxm
数组minm和maxm分别包含最小值和最大值的索引...