Spec-Zone.ru › NumPy 1.19

numpy.linalg.lstsq

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

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

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

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

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

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

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

rcondfloat, optional

Коэффициент отсечения для малых сингулярных значений 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–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.19/reference/generated/numpy.linalg.lstsq.html

Spec-Zone.ru

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