不知道你是基于什么理由说结果不接近数据点。当我把它们画出来的时候,它们看起来很好:#!/usr/bin/env python2.7
import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate import interp1d
x = np.array([1000, 1010, 1020, 1030, 1040, 1050,
1060, 1070, 1080, 1090, 1100, 1110])
y = np.array([0, 50, 100, 250, 300, 350,
500, 550, 600, 750, 800, 850])
A = np.vstack([ x, np.ones(12)])
m, c = np.linalg.lstsq(A.T, y)[0]
sol = m*x + c
finterp = interp1d(x, y)
print x[9], finterp(x[9]), y[9]
plt.plot(x, y, 'o', label='data')
plt.plot(x, sol, '-.', label='fit')
plt.plot(x, finterp(x), '-', label='interpolated')
plt.xlabel('x')
plt.ylabel('y')
plt.legend(loc='best')
plt.show()
基于评论,我添加了插值。我不太喜欢这种方法(如果已经知道的话,我更喜欢定义函数),因为当数据是噪声时,可能会导致过度拟合,但插值似乎更接近您想要的结果。在