NumPy, часть 4: linalg
В прошлых частях мы разбирались с основными операциями над массивами и randomом в NumPy. Теперь же мы приступим к более серьёзным вещам, которые есть в NumPy. Первый на очереди у нас модуль numpy.linalg, позволяющий делать многие операции из линейной алгебры.
Возведение в степень
linalg.matrix_power(M, n) - возводит матрицу в степень n.
Разложения
linalg.cholesky(a) - разложение Холецкого.
linalg.qr(a[, mode]) - QR разложение.
linalg.svd(a[, full_matrices, compute_uv]) - сингулярное разложение.
Некоторые характеристики матриц
linalg.eig(a) - собственные значения и собственные векторы.
linalg.norm(x[, ord, axis]) - норма вектора или оператора.
linalg.cond(x[, p]) - число обусловленности.
linalg.det(a) - определитель.
linalg.slogdet(a) - знак и логарифм определителя (для избежания переполнения, если сам определитель очень маленький).
Системы уравнений
linalg.solve(a, b) - решает систему линейных уравнений Ax = b.
linalg.tensorsolve(a, b[, axes]) - решает тензорную систему линейных уравнений Ax = b.
linalg.lstsq(a, b[, rcond]) - метод наименьших квадратов.
linalg.inv(a) - обратная матрица.
Замечания:
- linalg.LinAlgError - исключение, вызываемое данными функциями в случае неудачи (например, при попытке взять обратную матрицу от вырожденной).
- Подробная документация, как всегда, на английском: https://docs.scipy.org/doc/numpy/reference/routines.linalg.html
- Массивы большей размерности в большинстве функций linalg интерпретируются как набор из нескольких массивов нужной размерности. Таким образом, можно одним вызовом функции проделывать операции над несколькими объектами.
>>> a = np.arange(18).reshape((2,3,3)) >>> a array([[[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8]], [[ 9, 10, 11], [12, 13, 14], [15, 16, 17]]]) >>> np.linalg.det(a) array([ 0., 0.])