2012-12-04 77 views
1

此問題已接近:fitting a linear surface with numpy least squares,但沒有示例數據。我必須非常緩慢,但似乎我無法實現它的工作。使用NumPy對曲面進行多元線性迴歸 - 示例

我有以下代碼:

import numpy as np 
    XYZ = np.array([[0, 1, 0, 1], 
     [0, 0, 1, 1], 
     [1, 1, 1, 1]]) 
    A = np.row_stack((np.ones(len(XYZ[0])), XYZ[0, :], XYZ[1:])) 
    coeffs = np.linalg.lstsq(A.T, XYZ[2, :])[0] 
    print coeffs 

輸出是:

[ 5.00000000e-01 5.55111512e-17 9.71445147e-17 5.00000000e-01] 

我想z = a + bx + cy,即三個係數,但輸出給我四張。我在哪裏出錯了?我期望coeffs是這樣的:

[ 1.0 0.0 0.0] 

任何幫助表示讚賞。

+1

這裏沒有NP嘗試,但也許一個錯字在'XYZ [1:]'而不是'XYZ [1,:]'? –

回答

0

彼得·施奈德(評論)是正確的:你要養活XYZ[1, :]row_stack

>>> A = np.row_stack((np.ones(len(XYZ[0])), XYZ[0, :], XYZ[1, :])) 
>>> np.linalg.lstsq(A.T, XYZ[2, :])[0] 
array([ 1.00000000e+00, -7.85046229e-17, -7.85046229e-17]) 
+0

是的,午餐後看到了......愚蠢的錯誤。 – mrdr