Spec-Zone.ru › NumPy 1.18

numpy.linalg.lstsq

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

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

Решает уравнение a x = b вычислением вектора x, который минимизирует квадратическую евклидову норму \| b - a x \|^2_2. Уравнение может быть недоопределённым, хорошо определённым или переопределённым (то есть количество линейно независимых строк a может быть меньше, равно или больше, чем количество линейно независимых столбцов). Если 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

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

rankint

Ранг матрицы 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, 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.18/reference/generated/numpy.linalg.lstsq.html

Spec-Zone.ru

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