我有一个稀疏矩阵和另一个向量,我想将矩阵和向量相乘,使得向量的每一列等于零,它将使稀疏矩阵的整个列为零。
我怎样才能做到这一点?
答案 0 :(得分:1)
您没有提及有关如何定义数组和矩阵的任何内容,可以假设它们是numpy
矩阵和数组......
你是说像下面这样的东西吗?
import numpy as np
from scipy.sparse import csr_matrix
A = csr_matrix([[1, 2, 0], [0, 0, 3], [4, 0, 5]])
v = np.array([1, 0, 1])
print(A.dot(v))
若是,请看这里:
答案 1 :(得分:1)
主要问题是您的问题的大小以及您使用Python的事实,对于矩阵乘法而言,其速度比其他语言慢10-100倍。除非你使用像Cython这样的东西,否则我不会看到你有所改进。
答案 2 :(得分:0)
如果你不喜欢矩阵乘法的速度,那么你必须考虑直接修改矩阵属性。但取决于可能较慢的格式。
zero-out
的{{1}}列,您可以找到相关的非零元素,并将csr
值设置为零。然后运行data
方法从稀疏结构中删除这些元素。
设置eliminate_zeros
格式的列可能更简单 - 在csc
中找到相关值。至少要删除的元素将聚集在一起。我不打算详细介绍。
归零indptr
格式的行应该相当容易 - 用lil
替换相关列表。
无论如何,在熟悉格式的情况下,应该可以找出矩阵乘法的替代方法。但是,如果不这样做,有时做,我可以说哪些更快。