I'm trying to calculate an expression of the form K = P*C.T*S^-1 (implementation of a Kalman filter)
All the involved matrices are sparse, and I would of course like to avoid calculating the actual inverse.
I tried using
import scipy.sparse.linalg as spln
self.K = self.P.dot(spln.spsolve(S.T, C).T)
The problem is that spsolve expects it's second argument to be a vector and not a matrix.
edit: Clarification, the problem could in Matlab be solved by K = P * (C / S), so what I'm looking for is a method similar to spsolve but which can accept a matrix as its second argument. This could of course be done by splitting C into a number of column vectors c1..cn and solving the problem for each of them and then reassembling them into a matrix, but I suspect doing that will be both cumbersome and inefficient.
edit2&3: The dimensions of the matrices will typically be around P~10⁶x10^6, S~100x100, C=100x10⁶. P diagonal and S symmetric and C will only have one element per row. It will be used for an implementation of a Kalman filter using sparse matrices, see
http://en.wikipedia.org/wiki/Kalman_filter#The_Kalman_filter
As a workaround can do
But yes, it's a bug that
spsolve
does not accept matrices.However, as your
S
is not very large, you can as well use a dense inverse.