我希望在单个拟合步骤中使用2*M
拟合M = 2组N = 3个观测值(X,Y),我希望从中获得scipy.odr
最佳拟合值(斜率)并且在M组观察中的每一组内截取估计值)。从阅读Reason(s) for Halting: NP < 1 or NP > N
文档和一些相关的stackoverflow问题,似乎这应该是可能的,但是当我尝试使用下面的最小示例时,拟合无法收敛(beta
)。
我从最合适的from pylab import *
from scipy import odr
x = array([[1.0,2.0,3.0],[1.1,2.1,3.1]])
y = array([[1.1,2.3,3.1],[5.9,7.0,8.2]])
sx = x*0 + .1
sy = y*0 + .1
def f(B, x):
out = x * 0
for k in range(x.shape[0]) :
out[k,:] = B[2*k] * x[k,:] + B[2*k+1]
return out
result = odr.ODR(
odr.RealData( x, y, sx = sx, sy = sy ),
odr.Model(f), beta0 = array([1.,0.,1.,5.])
).run()
result.pprint()
值的相当好的近似开始。有什么想法为什么会如此悲惨地失败?
user = {
firstName: 'Nick',
age: 35
location: {
country: 'USA',
city: 'NYC',
},
}
答案 0 :(得分:0)
错误消息与您的起始值无关。我不确定ODR
是否可以处理此数据,因为它实际上是x,y,z
。我的解释是它会计算x
和y
的成员,每个成员N=2
(数组,但不过)并将其与您的免费参数进行比较,即NP=4
,所以NP>N
。