numpy.linalg.inv
- linalg.inv(a)[source]
-
Вычислить обратную матрицу.
Дана квадратная матрица
a, вернуть матрицуainvудовлетворяющуюa @ ainv = ainv @ a = eye(a.shape[0]).- Parameters:
-
- a(…, M, M) array_like
-
Матрица, которую нужно обратить.
- Returns:
-
- ainv(…, M, M) ndarray or matrix
-
Обратная матрица матрицы
a.
- Raises:
-
- LinAlgError
-
Если
aне является квадратной или обращение не удается.
См. также
scipy.linalg.inv-
Аналогичная функция в SciPy.
numpy.linalg.cond-
Вычислить число обусловленности матрицы.
numpy.linalg.svd-
Вычислить сингулярное разложение матрицы.
Примечания
В версии 1.8.0.
Применяются правила широковещательной передачи, см. документацию
numpy.linalgдля подробностей.Если
aопределяется как сингулярная, генерируетсяLinAlgError. Еслиaплохо обусловлена, может или не может быть сгенерированаLinAlgError, и результаты могут быть неточными из-за ошибок с плавающей точкой.Ссылки
[1]Википедия, “Число обусловленности”, https://en.wikipedia.org/wiki/Condition_number
Примеры
>>> from numpy.linalg import inv >>> a = np.array([[1., 2.], [3., 4.]]) >>> ainv = inv(a) >>> np.allclose(a @ ainv, np.eye(2)) True >>> np.allclose(ainv @ a, np.eye(2)) True
Если a — объект матрицы, то возвращаемое значение также является матрицей:
>>> ainv = inv(np.matrix(a)) >>> ainv matrix([[-2. , 1. ], [ 1.5, -0.5]])Обратные значения нескольких матриц могут быть вычислены одновременно:
>>> a = np.array([[[1., 2.], [3., 4.]], [[1, 3], [3, 5]]]) >>> inv(a) array([[[-2. , 1. ], [ 1.5 , -0.5 ]], [[-1.25, 0.75], [ 0.75, -0.25]]])Если матрица близка к сингулярной, вычисленная обратная матрица может не удовлетворять
a @ ainv = ainv @ a = eye(a.shape[0])даже еслиLinAlgErrorне генерируется:>>> a = np.array([[2,4,6],[2,0,2],[6,8,14]]) >>> inv(a) # No errors raised array([[-1.12589991e+15, -5.62949953e+14, 5.62949953e+14], [-1.12589991e+15, -5.62949953e+14, 5.62949953e+14], [ 1.12589991e+15, 5.62949953e+14, -5.62949953e+14]]) >>> a @ inv(a) array([[ 0. , -0.5 , 0. ], # may vary [-0.5 , 0.625, 0.25 ], [ 0. , 0. , 1. ]])Для обнаружения плохо обусловленных матриц можно использовать
numpy.linalg.condдля вычисления ее числа обусловленности [1]. Чем больше число обусловленности, тем хуже обусловлена матрица. Как правило, если число обусловленностиcond(a) = 10**k, то вы можете потерять доkзнаков точности в дополнение к тому, что потеряно численным методом из-за потери точности от арифметических методов.>>> from numpy.linalg import cond >>> cond(a) np.float64(8.659885634118668e+17) # may vary
Также можно обнаружить плохое обусловленность, проверив сингулярные значения матрицы напрямую. Отношение между наибольшим и наименьшим сингулярным значением — число обусловленности:
>>> from numpy.linalg import svd >>> sigma = svd(a, compute_uv=False) # Do not compute singular vectors >>> sigma.max()/sigma.min() 8.659885634118668e+17 # may vary
© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/generated/numpy.linalg.inv.html