Spec-Zone.ru › NumPy 2.0

numpy.linalg.lstsq

linalg.lstsq(a, b, rcond=None)[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. По умолчанию используется машинная точность, умноженная на max(M, N). Передача -1 будет использовать машинную точность.

Изменено в версии 2.0: Ранее значение по умолчанию было -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)[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–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/generated/numpy.linalg.lstsq.html

Spec-Zone.ru

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