Spec-Zone.ru › NumPy 1.21

numpy.linalg.lstsq

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

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

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

Параметры
a(M, N) array_like

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

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

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

rcondfloat, необязательно

Коэффициент отсечения для малых сингулярных значений a. Для определения ранга сингулярные значения обрабатываются как нулевые, если они меньше, чем rcond умноженное на наибольшее сингулярное значение a.

Изменено в версии 1.14.0: Если не установлено, выводится предупреждение FutureWarning. Предыдущее значение по умолчанию -1 будет использовать точность вычислений как параметр rcond, новое значение по умолчанию будет использовать точность вычислений умноженную на max(M, N). Чтобы отключить предупреждение и использовать новое значение по умолчанию, используйте rcond=None, чтобы продолжать использовать старое поведение, используйте rcond=-1.

Возвращаемые значения
x{(N,), (N, K)} ndarray

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

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

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

rankint

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

s(min(M, N),) ndarray

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

Исключения
LinAlgError

Если вычисление не сходится.

См. также

scipy.linalg.lstsq

Аналогичная функция в SciPy.

Примечания

Если 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, 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()
../../_images/numpy-linalg-lstsq-1.png

© 2005–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/reference/generated/numpy.linalg.lstsq.html

Spec-Zone.ru

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