我有一个情况,其中两个或更多个第二阵列,与一些系数,应当加起来(粗略地)到一个第三阵列。拟合多个发行
array1*c1 + array2*c2 ... = array3
我正在寻找的c1
和c2
,使前两个阵列最好近似array3
。我确信在scipy中存在一些这样做的方式,但我不确定从哪里开始。是否有特定的模块,我应该开始?
我有一个情况,其中两个或更多个第二阵列,与一些系数,应当加起来(粗略地)到一个第三阵列。拟合多个发行
array1*c1 + array2*c2 ... = array3
我正在寻找的c1
和c2
,使前两个阵列最好近似array3
。我确信在scipy中存在一些这样做的方式,但我不确定从哪里开始。是否有特定的模块,我应该开始?
numpy.linalg.lstsq解决了这个给你。该功能的面向对象的包装以及更高级的回归模型在scikit-learn和StatsModels中均可用。
(声明:我是一个scikit学习开发人员,所以这还不是最公正的建议曾经)
这只是线性回归(http://en.wikipedia.org/wiki/Ordinary_least_squares)。
让基质A
被具有array1, array2, ...
列让矢量a
是array3
和x
是列向量[c1,c2,...]'
。
你要解决的问题min_{x} (Ax-a)^2
。
服用衍生物和设置到零给出0=A'Ax-A'a
,这使溶液x=(A'A)^{-1}A'a
。
在numpy的,这是numpy.linalg.solve(numpy.dot(A.T,A),numpy.dot(A.T,a))
。
不知道如何实现,但在SciPy的退房'optimize.fsolve'。由于fsolve找到根(即,其中函数= 0),因此函数返回'array3-array1 * c1 + array2 * c2(...)',并在初始猜测中传递fsolve此函数。您可能必须在返回之前对数组求和,这可能会导致不良行为,例如一个包含相等+ ve和-ve值的数组。因此只是一个建议。 – Jdog