复制参数在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
由于
答案 0 :(得分:2)
CSC和CSR矩阵都在内部表示为三个1D阵列。对于不同的格式,这三个数组通常是不同的,即使它们代表完全相同的数据。因此,您无法使用指向相同数据但是以不同格式访问它的稀疏矩阵对象。
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])