您知道是否有任何算法或方法可以找到函数最高点之间的距离,如上所述(所以A,B,C,D等的值)?
例如,当你有这个函数的值数组和这个函数的参数数组时。
或许Python中有一个内置函数可以做到这一点吗?
y=np.array(radial)
x=np.arange(len(y))
m=argrelextrema(y, np.greater)[0]
z=[y[i] for i in m]
plt.plot(y)
plt.plot(m,z,'rs')
plt.show()
其中radial是一个浮点列表。
答案 0 :(得分:4)
您可以使用scipy.signal.argrelextrema
查找最大值的索引:
import numpy as np
from scipy.signal import argrelextrema
from matplotlib.pyplot import *
x = np.random.random(50) #data
m = argrelextrema(x, np.greater)[0] #array of indexes of the locals maxima
y = [x[i] for i in m] #array of max values
plot(x)
plot(m, y, 'rs')
show()
找到最大值后,您可以使用numpy.linalg.norm
查找距离:
distances = [np.linalg.norm(np.array([m[i], y[i-1]]) - np.array([m[i-1], y[i-1]])) for i in np.arange(1, len(m))]
或者只是减去:
distances = [m[i] - m[i-1] for i in np.arange(1, len(m))]
甚至只使用numpy.diff
distances = np.diff(m)
为更好的情节添加此代码并测试结果:
for i in range(len(distances)):
plot([m[i], m[i] + distances[i]], 2*[y[i]], color = 'g')
axvline(m[i], linestyle='--', color='0.75')