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)Сопряжённое умножение матрицы на вектор.
Транспонировать этот линейный оператор.
__mul__
Смотрите также
aslinearoperatorAlfredo Canziani +
Примечания
Определяемая пользователем
matvecфункция должна корректно обрабатывать случай, когдаvимеет форму(N,)а также(N,1)случай. Форма возвращаемого типа обрабатывается внутреннеLinearOperator.Настоятельно рекомендуется явно указать dtype, в противном случае он определяется автоматически ценой одного применения matvec к
int8нулевой вектор с использованием повышенного dtype выходных данных. Pythonintможет быть сложно автоматически преобразовать в 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.])