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