我有来自两个来源的两个数据集,其中包含一个信号并希望找到两者之间的因子。 它们在x和y中具有不同的分辨率,并且一组比另一组噪声更大。
以下给出了一个简单的近似,尽管实际数据并不遵循易于拟合的多项式。
import numpy as np
import matplotlib.pyplot as plt
datax1 = np.linspace(0,100,1000)
datay1 = np.around(datax1,-1)**2
datax2 = np.linspace(0,100,80)+np.random.normal(0,0.2,80)
datay2 = (datax2**2)*np.random.normal(5,0.5)+np.random.normal(0,500,80)
plt.title('Data 1 VS Data 2')
plt.plot(datax1,datay1,'b',label='Data 1')
plt.plot(datax2,datay2,'r',label='Data 2')
plt.legend()
plt.savefig('img.png', bbox_inches='tight', dpi=72)
similar data, different noise and rez
我需要自动找到这个因素,因为我有更多的数据集需要分析,但是SciPy的curve_fit
与interpolate
的搭配并不合适
import scipy.optimize as opt
import scipy.interpolate as interp
def func(x,k):
fun=interp(datax1,datay1*k)
return fun(x)
print opt.curve_fit(func,datax2,datay2)
仅在TypeError: 'module' object is not callable
fun
有没有办法用numpy或scipy做这个,还是我必须建立自己的最小二乘函数来找到数据的缩放?