【发布时间】:2018-01-24 15:50:20
【问题描述】:
我正在尝试将一些数据拟合到具有两个自变量的非线性模型中,但是两个自变量的向量长度是 xdat 小于 ydat。
这与这个问题密切相关:Python curve_fit with multiple independent variables,但是xdat 和ydat 的大小不同的要求似乎破坏了事情。
我们以xnx为例,但改变其中一个数组的长度:
import numpy as np
from scipy.optimize import curve_fit
def func(X, a, b, c):
x,y = X
return np.log(a) + b*np.log(x) + c*np.log(y)
# some artificially noisy data to fit
x = np.linspace(0.1,1.1,101)
y = np.linspace(1.,2., 90) #I have changed the length of one of these arrays
a, b, c = 10., 4., 6.
z = func((x,y), a, b, c) * 1 + np.random.random(101) / 100
# initial guesses for a,b,c:
p0 = 8., 2., 7.
print curve_fit(func, (x,y), z, p0)
如果你这样做,那么你最终会出现错误:
ValueError:操作数无法与形状一起广播 (101,) (90,)
有没有办法强制曲线拟合采用不同长度的数组?
【问题讨论】:
-
我不明白你为什么要这样做。它们必须具有相同的维度,否则您会丢失一些数据来评估您的功能。您必须指定如何处理这些不同的维度。
-
嗯...也许这个例子没有那么有代表性。我试图拟合一些实验测量的光谱,在这种情况下,
x是光谱的频率,y是进行测量的温度,z是强度数组。我要拟合的函数将 x 和 y 作为输入,所以z只是len(x)bylen(y)数组,除非我错过了什么? -
对于 z 的每个测量值,您都有对应的 x 和 y 值。所以它们应该具有相同的尺寸。维度只是样本的数量。
-
这不是上面的代码生成的吗?
标签: python curve-fitting