It seems numpy's
einsum function does not work with
scipy.sparse matrices. Are there alternatives to do the sorts of things
einsum can do with sparse matrices?
In response to @eickenberg's answer: The particular einsum I'm wanting to is
numpy.einsum("ki,kj->ij",A,A) - the sum of the outer products of the rows.
Best How To :
A restriction of
scipy.sparse matrices is that they represent linear operators and are thus kept two dimensional, which leads to the question: Which operation are you seeking to do?
einsum operations on a pair of 2D matrices are very easy to write without
transpose and pointwise operations, provided that the result does not exceed two dimensions.
So if you need a specific operation on a number of sparse matrices, it is probable that you can write it without
UPDATE: A specific way to implement
np.einsum("ki, kj -> ij", A, A) is
A.T.dot(A). In order to convince yourself, please try the following example:
import numpy as np
rng = np.random.RandomState(42)
a = rng.randn(3, 3)
b = rng.randn(3, 3)
the_einsum_ab = np.einsum("ki, kj -> ij", a, b)
the_a_transpose_times_b = a.T.dot(b)
# We write a test in order to assert equality
from numpy.testing import assert_array_equal
assert_array_equal(the_einsum_ab, the_a_transpose_times_b) # This passes, so equality
This result is slightly more general. Now if you use
b = a you obtain your specific result.