的限制scipy.sparse
矩阵的特点是它们代表线性运算符,因此保持二维,这就引出了一个问题:您想要执行哪种操作?
All einsum
一对二维矩阵的运算非常容易编写,无需einsum
using dot
, transpose
以及逐点运算,前提是结果不超过二维。
因此,如果您需要对多个稀疏矩阵进行特定操作,那么您很可能无需编写它einsum
.
UPDATE: 具体实现方式np.einsum("ki, kj -> ij", A, A)
is A.T.dot(A)
。为了说服自己,请尝试以下示例:
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
这个结果稍微更一般一些。现在如果你使用b = a
你得到你的具体结果。