Spec-Zone.ru › NumPy 1.11

numpy.linalg.lstsq

numpy.linalg.lstsq(a, b, rcond=-1) [source]

Возвращает решение метода наименьших квадратов для линейного матричного уравнения.

Решает уравнение a x = b вычисляя вектор x, который минимизирует евклидову норму 2 || b - a x ||^2. Уравнение может быть недо-, хорошо- или переопределённым (т.е., число линейно независимых строк a может быть меньше, равно или больше числа линейно независимых столбцов). Если a является квадратной матрицей полного ранга, то x (за исключением погрешности округления) является «точным» решением уравнения.

Параметры:

a : (M, N) array_like

Матрица «коэффициентов».

b : {(M,), (M, K)} array_like

Значения ординаты или «зависимой переменной». Если b двумерная, решение метода наименьших квадратов вычисляется для каждого из K столбцов b.

rcond : float, optional

Пороговое отношение для малых сингулярных значений a. Сингулярные значения обнуляются, если они меньше, чем rcond кратное наибольшему сингулярному значению a.

Возвращаемые значения:

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

Решение метода наименьших квадратов. Если b двумерная, решения находятся в K столбцах x.

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

Суммы остатков; квадратная евклидова норма 2 для каждого столбца в b - a*x. Если ранг a меньше N или M ≤ N, это пустой массив. Если b одномерный, это массив формы (1,). В противном случае форма (K,).

rank : int

Ранг матрицы a.

s : (min(M, N),) ndarray

Сингулярные значения a.

Исключения:

LinAlgError

Если вычисление не сошлось.

Примечания

Если b является матрицей, все результаты массивов возвращаются как матрицы.

Примеры

Построение прямой, y = mx + c, по некоторым шумным точкам данных:

>>> 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]
>>> print(m, c)
1.0 -0.95

Постройте данные вместе с подходящей прямой:

>>> 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()

(Исходный код, png, pdf)

../../_images/numpy-linalg-lstsq-1.png

© 2008–2016 NumPy Developers
Licensed under the NumPy License.
https://docs.scipy.org/doc/numpy-1.11.0/reference/generated/numpy.linalg.lstsq.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API