scipy.sparse.linalg.

LinearOperator#

класс scipy.sparse.linalg.LinearOperator(*args, **kwargs)[источник]#

Общий интерфейс для выполнения матрично-векторных произведений

Многие итеративные методы (например, cg, gmres) не нужно знать отдельные элементы матрицы для решения линейной системы A@x = b. Такие решатели требуют только вычисления произведений матрицы на вектор, A@v где v является плотным вектором. Этот класс служит абстрактным интерфейсом между итеративными решателями и матрично-подобными объектами.

Для создания конкретного LinearOperator, либо передайте соответствующие вызываемые объекты в конструктор этого класса, либо создайте его подкласс.

Подкласс должен реализовать один из методов _matvec и _matmat, и атрибуты/свойства shape (пара целых чисел) и dtype (может быть None). Он может вызывать __init__ в этом классе для проверки этих атрибутов. Реализация _matvec автоматически реализует _matmat (используя наивный алгоритм) и наоборот.

При необходимости подкласс может реализовать _rmatvec или _adjoint для реализации эрмитова сопряжённого (сопряжённого транспонирования). Как и в _matvec и _matmat, реализующий либо _rmatvec или _adjoint реализует другой автоматически. Реализация _adjoint предпочтительнее; _rmatvec в основном присутствует для обратной совместимости.

Параметры:
shapeкортеж

Размеры матрицы (M, N).

matvecвызываемый f(v)

Возвращает возвращает A @ v.

rmatvecвызываемый f(v)

Возвращает A^H @ v, где A^H является сопряжённо-транспонированной матрицей A.

matmatвызываемая функция f(V)

Возвращает A @ V, где V является плотной матрицей с размерами (N, K).

dtypedtype

Тип данных матрицы.

rmatmatвызываемая функция f(V)

Возвращает A^H @ V, где V является плотной матрицей с размерами (M, K).

Атрибуты:
argsкортеж

Для линейных операторов, описывающих произведения и т.д. других линейных операторов, операнды бинарной операции.

ndimint

Количество измерений (всегда равно 2)

Методы

__call__(x)

Вызвать self как функцию.

adjoint()

Эрмитово сопряженный.

dot(x)

Умножение матрица-матрица или матрица-вектор.

matmat(X)

Умножение матрицы на матрицу.

matvec(x)

Умножение матрицы на вектор.

rmatmat(X)

Сопряженное матрично-матричное умножение.

rmatvec(x)

Сопряжённое умножение матрицы на вектор.

transpose()

Транспонировать этот линейный оператор.

__mul__

Смотрите также

aslinearoperator

Alfredo Canziani +

Примечания

Определяемая пользователем matvec функция должна корректно обрабатывать случай, когда v имеет форму (N,) а также (N,1) случай. Форма возвращаемого типа обрабатывается внутренне LinearOperator.

Настоятельно рекомендуется явно указать dtype, в противном случае он определяется автоматически ценой одного применения matvec к int8 нулевой вектор с использованием повышенного dtype выходных данных. Python int может быть сложно автоматически преобразовать в numpy целые числа в определении matvec поэтому определение может быть неточным. Предполагается, что matmat, rmatvec, и rmatmat приведет к тому же dtype выходных данных при заданном int8 вход как matvec.

Экземпляры LinearOperator также могут умножаться, складываться друг с другом и возводиться в степень, все лениво: результат этих операций всегда является новым, составным LinearOperator, который откладывает линейные операции к исходным операторам и комбинирует результаты.

Более подробная информация о том, как создать подкласс LinearOperator, и несколько примеров конкретных экземпляров LinearOperator можно найти во внешнем проекте PyLops.

Примеры

>>> import numpy as np
>>> from scipy.sparse.linalg import LinearOperator
>>> def mv(v):
...     return np.array([2*v[0], 3*v[1]])
...
>>> A = LinearOperator((2,2), matvec=mv)
>>> A
<2x2 _CustomLinearOperator with dtype=int8>
>>> A.matvec(np.ones(2))
array([ 2.,  3.])
>>> A @ np.ones(2)
array([ 2.,  3.])