Python 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

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矩阵在内部都表示为三个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
使用。