我试图通过在python中将一个图移动到另一个来尽可能匹配下面绘制的两个图。
两个图在x中具有不同的范围,它们是从两个数组数据集中绘制的。
我现在在想的是,通过将其中之一进行一次迭代移动,并使其移动直到两个数据(或图形)之间的差异最小化。
但是,我不知道如何开始。
答案 0 :(得分:0)
我要做的是尝试移动一组位置,以使它与另一组之间的均方根差最小。您也可以将标准缩小到数据中感兴趣的区域(我猜是在峰值附近)。要计算RMS误差,您需要将数据插值到相同的x值。这是一个示例:
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import minimize
# Create data
x0 = np.linspace(0, 2.*np.pi, 101)
y0 = np.sin(x0)
x1 = np.linspace(0, 2.*np.pi, 201)
y1 = np.sin(x1+0.1*np.pi)
def target(x):
# Interpolate set 1 onto grid of set 0 while shifting it by x.
y1interp = np.interp(x0, x1+x, y1)
# Compute RMS error between the two data with set 1 shifted by x.
return np.sqrt(np.sum((y0-y1interp)**2.))
result = minimize(target, method="BFGS", x0=[0.])#, bounds=[(-0.2, 0.2)]) # bounds work with some methods only
print(result)
plt.figure()
plt.plot(x0, y0, "r", x1, y1, "b")
plt.plot(x1+result.x, y1, "k", lw=2)
plt.legend(["set 0", "set 1", "set 1 shifted"])
请注意,scipy.optimize.minimize对设置非常敏感,因此您需要使用它们才能使它们更适合解决您的问题: https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html