我有一组曲线 F={f1, f2, f3,..., fN}
,每条曲线都是通过一组点定义的,即:我没有显式 函数的形式。所以我有一组 N
表,如下所示:
#f1: x y
1.2 0.5
0.6 5.6
0.3 1.2
...
#f2: x y
0.3 0.1
1.2 4.1
0.8 2.2
...
#fN: x y
0.7 0.3
0.3 1.1
0.1 0.4
...
我还有一组观察/测量的数据点 O=[p1, p2, p3,..., pM]
其中每个点都有 x, y
坐标和 [0, 1]
之间的给定权重,所以它看起来像:
#O: x y w
0.2 1.6 0.5
0.3 0.7 0.3
0.1 0.9 0.8
...
因为 N ~ 10000
(我有大量的函数)我正在寻找的是一种有效的(更准确地说:快速)找到曲线的方法最适合我的一组观察和加权点O
。
当我有函数的显式形式 (scipy.optimize.curve_fit) 时,我知道如何找到最适合 python
的函数,但是当我将函数定义为表时,我该怎么做呢?
为了拟合,您需要两个元素,即数据(您已经拥有)和模型空间(线性模型、高斯过程、支持向量回归)。在您的情况下,您的模型有额外的限制,即某些数据点的权重应该不同于其他数据点。可能是这样的事情对你有用:
from scipy.interpolate import UnivariateSpline
temp = np.asarray([10, 9.6, 9.3, 9.0, 8.7])
height = np.asarray([129, 145, 167, 190, 213])
f = UnivariateSpline(height, temp)
现在你可以在任何你想要的地方计算f
:
test_points = np.arange(120, 213, 5)
plot(height, temp, 'o', regular_heights, f(test_points), 'x')
我是一名优秀的程序员,十分优秀!