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

wie*_*nYo -1 python numpy numerical-methods

在此处输入图片说明

您是否知道是否有算法或方法可以找到函数的最高点之间的距离(如上)(因此,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()
Run Code Online (Sandbox Code Playgroud)

其中“ radial”是浮点列表。

Joã*_*ulo 5

您可以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()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

找到最大值后,您可以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))]
Run Code Online (Sandbox Code Playgroud)

或者只是减去:

distances = [m[i] - m[i-1] for i in np.arange(1, len(m))]
Run Code Online (Sandbox Code Playgroud)

甚至只是使用 numpy.diff

distances = np.diff(m)
Run Code Online (Sandbox Code Playgroud)

添加此代码以获得更好的图并测试结果:

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')
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明