对于给定的稀疏矩阵,如何将其与给定的二进制值向量相乘

时间:2018-05-29 09:08:16

标签: python numpy scipy sparse-matrix linear-algebra

我有一个稀疏矩阵和另一个向量,我想将矩阵和向量相乘,使得向量的每一列等于零,它将使稀疏矩阵的整个列为零。

我怎样才能做到这一点?

3 个答案:

答案 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))

若是,请看这里:

https://docs.scipy.org/doc/scipy/reference/sparse.html

答案 1 :(得分:1)

主要问题是您的问题的大小以及您使用Python的事实,对于矩阵乘法而言,其速度比其他语言慢10-100倍。除非你使用像Cython这样的东西,否则我不会看到你有所改进。

答案 2 :(得分:0)

如果你不喜欢矩阵乘法的速度,那么你必须考虑直接修改矩阵属性。但取决于可能较慢的格式。

zero-out的{​​{1}}列,您可以找到相关的非零元素,并将csr值设置为零。然后运行data方法从稀疏结构中删除这些元素。

设置eliminate_zeros格式的列可能更简单 - 在csc中找到相关值。至少要删除的元素将聚集在一起。我不打算详细介绍。

归零indptr格式的行应该相当容易 - 用lil替换相关列表。

无论如何,在熟悉格式的情况下,应该可以找出矩阵乘法的替代方法。但是,如果不这样做,有时做,我可以说哪些更快。