bundles / scipy 2.0.0.dev0+git20260907.41eeb59 / scipy / linalg / _basic / lstsq
function
scipy.linalg._basic:lstsq
source: build-install/usr/lib/python3.14/site-packages/scipy/linalg/_basic.py:1246
Signature
def lstsq(a, b, cond = None, overwrite_a = False, overwrite_b = False, check_finite = True, lapack_driver = None)Summary
Compute least-squares solution to the equation a @ x = b.
Extended Summary
Compute a vector x such that the 2-norm |b - A x| is minimized.
Parameters
a: (..., M, N) array_likeLeft-hand side array
b: (M,) or (..., M, K) array_likeRight hand side array
cond: float, optionalCutoff for 'small' singular values; used to determine effective rank of a. Singular values smaller than
cond * largest_singular_valueare considered zero.overwrite_a: bool, optionalWhether to overwrite data in
a(may improve performance). Default is False. See tutorial_linalg_overwrite for details.overwrite_b: bool, optionalWhether to overwrite data in
b(may improve performance). Default is False. See tutorial_linalg_overwrite for details.check_finite: bool, optionalWhether to check that the input matrices contain only finite numbers. Disabling may give a performance gain, but may result in problems (crashes, non-termination) if the inputs do contain infinities or NaNs.
lapack_driver: str, optionalWhich LAPACK driver is used to solve the least-squares problem. Options are
'gelsd','gelsy','gelss'. Default ('gelsd') is a good choice. However,'gelsy'can be slightly faster on many problems.'gelss'was used historically. It is generally slow but uses less memory.
Returns
x: (N,) or (..., N, K) ndarrayLeast-squares solution.
residues: (K,) ndarray or floatIf
lapack_driveris'gelss'or'gelsd'this contains the square of the 2-norm for each column inb - a xifM > Nandrank == N. If the rank condition is violated,NaNis returned instead. Iflapack_driverif'gelsy'orM <= Na (0,)-shaped array is returned.rank: intEffective rank of
a.s: (min(M, N),) ndarray or NoneSingular values of
a. The condition number ofaiss[0] / s[-1].
Raises
: LinAlgErrorIf computation does not converge.
: ValueErrorWhen parameters are not compatible.
Notes
When 'gelsy' is used as a driver, s is always None.
Array arguments of this function, a and b, may have additional "batch" dimensions prepended to the core shape. In this case, the array is treated as a batch of lower-dimensional slices; see linalg_batch for details.
Examples
import numpy as np from scipy.linalg import lstsq import matplotlib.pyplot as plt✓
x = np.array([1, 2.5, 3.5, 4, 5, 7, 8.5]) y = np.array([0.3, 1.1, 1.5, 2.0, 3.2, 6.6, 8.6])✓
M = x[:, np.newaxis]**[0, 2]
✓M
✗array([[ 1. , 1. ],
[ 1. , 6.25],
[ 1. , 12.25],
[ 1. , 16. ],
[ 1. , 25. ],
[ 1. , 49. ],
[ 1. , 72.25]])
We want to find the least-squares solution to ``M.dot(p) = y``,
where ``p`` is a vector with length 2 that holds the parameters
``a`` and ``b``.
p, res, rnk, s = lstsq(M, y)
✓p
✗array([0.21, 0.12])Plot the data and the fitted curve.
plt.plot(x, y, 'o', label='data')
✗[<matplotlib.lines.Line2D object at 0x7f3f68866510>]
xx = np.linspace(0, 9, 101) yy = p[0] + p[1]*xx**2✓
plt.plot(xx, yy, label='least squares fit, $y = a + bx^2$') plt.xlabel('x') plt.ylabel('y') plt.legend(framealpha=1, shadow=True)✗
<matplotlib.legend.Legend object at 0x7f3f688652b0>
plt.grid(alpha=0.25) plt.show()✓

M1 = np.hstack((M, np.zeros((7, 1)))) M2 = x[:, np.newaxis] ** [0, 2, 1] MM = np.stack((M1, M2)) x, res, rnk, s = lstsq(MM, y)✓
x
✗array([[0.21, 0.12, 0. ],
[0.06, 0.11, 0.08]])
rnk
✓array([2, 3])Note that the rows of the ``x`` solution are equivalent to using ``M1`` and ``M2``, respectively. In a similar vein, to simulate an effect of random noise on ``y``, you can turn it into an array with multiple columns, where each column corresponds to a specific realization of the noise.
See also
- scipy.optimize.nnls
linear least squares with non-negativity constraint
Aliases
scipy.linalg.lstsq