Python scipy稀疏矩阵,复制参数
copy参数在构造scipy稀疏数组中的作用是什么Python scipy稀疏矩阵,复制参数,python,scipy,sparse-matrix,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_ma
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矩阵在内部都表示为三个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])
也许我不明白
del
是如何工作的,但以下内容对我来说意味着即使指定了copy=False
也会复制数据:print S.todense()
S2=sp.sparse.csr\u矩阵(S,copy=False)代码>dels.data,S.index,S.indptr,S代码>print S2.todense()#Python为每个对象保留一个引用计数。例如,del S.data
时,相应的数组将其引用计数减少1,并且从对象中删除.data
属性。如果没有其他对象指向这个相同的数组,那么引用计数将下降到零,它将被垃圾收集。但是,如果其他对象指向该数组,则该数组将不会被垃圾收集,并且即使由于删除了该属性而无法从S
访问该数组,该数组仍会保留下来供S2
使用。