Я пытаюсь вычислить выражение вида K = P * C.T * S ^ -1 (реализация фильтра Калмана)
Все задействованные матрицы разрежены, и я, конечно, хотел бы избежать вычисления фактического обратного значения.
Я пытался использовать
import scipy.sparse.linalg as spln
self.K = self.P.dot(spln.spsolve(S.T, C).T)
Проблема в том, что spsolve ожидает, что вторым аргументом будет вектор, а не матрица.
редактирование:
Пояснение: проблема в Matlab может быть решена с помощью K = P * (C / S), поэтому я ищу метод, похожий на spsolve, но который может принять матрицу в качестве второго аргумента. Конечно, это можно сделать, разбив C на несколько векторов-столбцов c1..cn и решив задачу для каждого из них, а затем заново собрав их в матрицу, но я подозреваю, что это будет громоздким и неэффективным.
edit2 & 3:
Размеры матриц обычно составляют около P ~ 10 Px10 ^ 6, S ~ 100x100, C = 100x10⁶. Диагональ P и S симметричны, а C будет иметь только один элемент в строке.
Он будет использоваться для реализации фильтра Калмана с использованием разреженных матриц, см.
http://en.wikipedia.org/wiki/Kalman_filter#The_Kalman_filter