numpy.linalg.lstsq
-
numpy.linalg.lstsq(a, b, rcond='warn')[source] -
Возвращает решение по методу наименьших квадратов для линейного матричного уравнения.
Решает уравнение
a x = bпутём вычисления вектораx, который минимизирует евклидову норму|| 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.Изменено в версии 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,).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()
© 2005–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.14.5/reference/generated/numpy.linalg.lstsq.html