當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python numpy linalg.lstsq用法及代碼示例


本文簡要介紹 python 語言中 numpy.linalg.lstsq 的用法。

用法:

linalg.lstsq(a, b, rcond='warn')

返回線性矩陣方程的最小二乘解。

計算向量x近似解方程a @ x = b.方程可能是under-、well-或over-determined(即,線性獨立的行數a可以小於、等於或大於其線性獨立列的數量)。如果a是方的並且是滿秩的,那麽x(但對於舍入誤差)是方程的“exact” 解。別的,x最小化歐幾裏得 2 範數\(||b - ax||\) .如果有多個最小化解,則具有最小 2 範數的解\(||x||\) 被退回。

參數

a (M, N) 數組

“Coefficient” 矩陣。

b {(M,), (M, K)} 數組

縱坐標或“dependent variable”值。如果 b 是二維的,則為 b 的 K 列中的每一列計算最小二乘解。

rcond 浮點數,可選

Cut-off a 的小奇異值的比率。出於排名確定的目的,如果奇異值小於 rcond 乘以 a 的最大奇異值,則奇異值被視為零。

返回

x {(N,), (N, K)} ndarray

最小二乘解。如果 b 是二維的,則解位於 x 的 K 列中。

residuals {(1,), (K,), (0,)} ndarray

殘差平方和:每列的平方歐幾裏得 2 範數b - a @ x.如果排名ais < N 或 M <= N,這是一個空數組。如果b是一維的,這是一個 (1,) 形狀的數組。否則形狀為 (K,)。

rank int

矩陣 a 的秩。

s (min(M, N),) ndarray

a的奇異值。

拋出

LinAlgError

如果計算不收斂。

注意

如果 b 是矩陣,則所有數組結果都以矩陣形式返回。

例子

通過一些嘈雜的 data-points 擬合一條線 y = mx + c

>>> x = np.array([0, 1, 2, 3])
>>> y = np.array([-1, 0.2, 0.9, 2.1])

通過檢查係數,我們看到這條線應該有大約 1 的梯度,並且在或多或少 -1 處切割 y 軸。

我們可以將線方程改寫為y = Ap,其中A = [[x 1]]p = [[m], [c]].現在使用lstsq解決p

>>> A = np.vstack([x, np.ones(len(x))]).T
>>> A
array([[ 0.,  1.],
       [ 1.,  1.],
       [ 2.,  1.],
       [ 3.,  1.]])
>>> m, c = np.linalg.lstsq(A, y, rcond=None)[0]
>>> m, c
(1.0 -0.95) # may vary

將數據與擬合線一起繪製:

>>> import matplotlib.pyplot as plt
>>> _ = plt.plot(x, y, 'o', label='Original data', markersize=10)
>>> _ = plt.plot(x, m*x + c, 'r', label='Fitted line')
>>> _ = plt.legend()
>>> plt.show()
numpy-linalg-lstsq-1.png

相關用法


注:本文由純淨天空篩選整理自numpy.org大神的英文原創作品 numpy.linalg.lstsq。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。