python - scipy 稀疏矩阵,复制参数

标签 python scipy sparse-matrix

copy 参数在 scipy 稀疏数组构造中的作用是什么?

scipy.sparse.lil_matrix(arg1, shape=None, dtype=None, copy=False)

它似乎没有做任何事情!

当我从另一个矩阵构造稀疏矩阵并显式设置 copy=False 时,更改一个矩阵不会更改另一个矩阵。

import scipy.sparse as sp
import numpy as np
A = sp.csc_matrix(np.array([[1,0],[0,0]]))
B = sp.csr_matrix(A, copy=False)
B[1,1] = 1 #editing B should change A but it does not 
print A.data, B.data #these values are different

谢谢

最佳答案

CSC 和 CSR 矩阵都在内部表示为三个一维数组。这三个数组通常对于不同的格式是不同的,即使它们代表完全相同的数据。因此,您无法稀疏矩阵对象指向相同的数据但以不同的格式访问它。

copy 参数可以让您做的是让两个相同格式的稀疏矩阵对象指向相同的数据。例如:

a = sps.csr_matrix([[1, 0], [0, 0]])
b = sps.csr_matrix(a, copy=False)

>>> a.data
array([1])
>>> b.data
array([1])
>>> a[0, 0] = 2
>>> a.data
array([2])
>>> b.data
array([2])

这也有局限性,例如对于 CSR(和 CSC)格式,破坏稀疏结构将破坏数据的通用性,因为它需要实例化新数组,而不是简单地更改现有数组中的值:

>>> a[1, 1] = 5
>>> a.data
array([2, 5])
>>> b.data
array([2])

关于python - scipy 稀疏矩阵,复制参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16722316/

相关文章:

python - numpy.loadtxt - 否定usecols?

python - 用于增量求和的正确 SciPy 稀疏矩阵格式是什么

python - 为什么我在使用 Lambda 函数时遇到错误?

python - 为 scipy.optimize.minimize(方法 ='L-BFGS-B')设置收敛公差

python - urllib2 的结果与网络浏览器的结果不同

python - 使用 bool 掩码对 scipy 稀疏矩阵进行切片

python - matplotlib 3D 数据的 2D 切片

python - scipy::crs_matrix 的棋盘子矩阵

Python稀疏矩阵逆和拉普拉斯计算

python - 在 wtforms 中选择字段并通过 javascript 添加 <option>