python - 如何计算一个巨大的稀疏矩阵的 (1 - SparseMatrix)?

标签 python numpy scipy sparse-matrix theano

我对此进行了很多研究,但找不到解决此问题的实用方法。我正在使用 scipy 创建 csr 稀疏矩阵,并希望从所有矩阵的等效矩阵中减去该矩阵。在 scipy 和 numpy 符号中,如果矩阵不是稀疏的,我们可以通过简单地写 1 - MatrixVariable 来实现。但是,如果 Matrix 是稀疏的,则不会执行此操作。我只能想到以下明显的解决方案:

遍历整个稀疏矩阵,将所有零元素设置为1,将所有非零元素设置为0。

但这会创建一个矩阵,其中大多数元素为 1,只有少数元素为 0,这不再是稀疏矩阵,并且由于其巨大的尺寸无法转换为密集矩阵。

执行此操作的另一种有效方法是什么?

谢谢。

最佳答案

你的新矩阵不会是稀疏的,因为它到处都是 1,所以你需要一个密集数组来保存它:

new_mat = np.ones(sps_mat.shape, sps_mat.dtype) - sps_mat.todense()

这要求您的矩阵适合内存。它实际上要求它适合内存 3 次。如果这是一个问题,您可以通过以下方式提高效率:

new_mat = sps_mat.todense()
new_mat *= -1
new_mat += 1

关于python - 如何计算一个巨大的稀疏矩阵的 (1 - SparseMatrix)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17426742/

相关文章:

python - Django 模型不可 JSON 序列化

python - 如何限制堆大小?

python - Matlab 到 Python numpy 索引和乘法问题

python - 持有期交易策略盈亏——解决rolling_apply瓶颈

Python有效地找到多个多项式的局部最大值/最小值

python - 带有 mask 和 RGB 图像的 Numpy/Scipy

python - 尝试在 Python 3 中拆分字符串,得到 'str' 不支持缓冲区接口(interface)

python - 如何阻止 pyCharm 提示下划线字符串?

python - 如何将 NumPy 1.18.5 for Python3.8 与 Anaconda 一起使用?

python - 在 Mac OS Mavericks 10.9.2 上升级 scipy