如何计算函数最高值之间的距离?

时间:2015-06-27 18:31:44

标签: python numpy numerical-methods

enter image description here

您知道是否有任何算法或方法可以找到函数最高点之间的距离,如上所述(所以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是一个浮点列表。

1 个答案:

答案 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()

enter image description here

找到最大值后,您可以使用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')

enter image description here