numpy.linalg.lstsq#
- linalg.lstsq(a, b, rcond=None)[原始碼]#
返回線性矩陣方程式的最小平方解。
計算向量 x,其近似求解方程式
a @ x = b
。此方程式可能是欠定、適定或超定的(即,a 的線性獨立列數可能小於、等於或大於其線性獨立行數)。如果 a 是方陣且滿秩,則 x(但有捨入誤差)是方程式的「精確」解。否則,x 會最小化歐幾里得 2-範數 \(||b - ax||\)。如果有多個最小化解,則返回 2-範數 \(||x||\) 最小的解。- 參數:
- a(M, N) 類陣列
「係數」矩陣。
- b{(M,), (M, K)} 類陣列
縱坐標或「應變數」值。如果 b 是二維的,則會針對 b 的每個 K 列計算最小平方解。
- rcond浮點數,選用
用於 a 的小奇異值的截止比率。為了確定秩,如果奇異值小於 rcond 乘以 a 的最大奇異值,則將其視為零。預設值使用機器精度乘以
max(M, N)
。傳遞-1
將使用機器精度。在 2.0 版本變更: 先前,預設值為
-1
,但已發出警告表示此值將會變更。
- 返回:
- x{(N,), (N, K)} ndarray
最小平方解。如果 b 是二維的,則解位於 x 的 K 列中。
- residuals{(1,), (K,), (0,)} ndarray
平方殘差總和:
b - a @ x
中每列的平方歐幾里得 2-範數。如果 a 的秩小於 N 或 M <= N,則這會是空陣列。如果 b 是一維的,則這會是 (1,) 形狀的陣列。否則形狀為 (K,)。- rank整數
矩陣 a 的秩。
- s(min(M, N),) ndarray
a 的奇異值。
- 引發:
- LinAlgError
如果計算未收斂。
另請參閱
scipy.linalg.lstsq
SciPy 中的相似函數。
註解
如果 b 是矩陣,則所有陣列結果都會以矩陣形式返回。
範例
擬合一條線,
y = mx + c
,穿過一些雜訊資料點>>> import numpy as np >>> x = np.array([0, 1, 2, 3]) >>> y = np.array([-1, 0.2, 0.9, 2.1])
透過檢查係數,我們可以看到該線的梯度應約為 1,並在 y 軸上的截距約為 -1。
我們可以將線方程式改寫為
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)[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()