我使用的是一个用Python实现的数学对象(H²矩阵),它是密集矩阵的近似(来自h2tools库)。这个包只实现了一个矩阵向量积,所以我可以创建一个描述它的线性运算符。
我需要在一个线性算子(来自scipy.sparse. linalg.LinearOperator)和一个稀疏矩阵(CSC格式)之间做矩阵乘积。此产品的结果需要采用稀疏格式。
有没有一种方法可以用Scipy或其他库来做到这一点?
我试过一个简单的例子。
我创建了一个稀疏CSC矩阵,并从矩阵中提取非线性算子:
import numpy as np
from scipy.sparse import csc_matrix
from scipy.sparse.linalg import LinearOperator
# Define a CSC matrix A
A = csc_matrix([[1, 0], [0, 1]])
# Creating Linear operator from another matrix
B = np.array([[10, 0], [0, 10]] )
lin_op_B = LinearOperator(B.shape, matvec=B.dot)
然后我想执行矩阵乘积:
# Perform the matrix-matrix multiplication
result = A @ lin_op_B
print(result.todense())
这将打印B矩阵:
[[10 0]
[0 10]]
CSC格式。
1条答案
按热度按时间j7dteeu81#
正如我所评论的,将点应用于稀疏矩阵试图做一个纯粹的密集点。稀疏的文档试图强调这一点。
正确的点:
或使B稀疏
matmul运算符也可以工作,但结果是稠密的
另一个密集的结果:
只有当
B
本身是稀疏的时,才会得到稀疏结果。也就是说,sparse与sparse的dot/matmul产生sparse。否则,稀疏与密集会产生密集。