scipy稀疏矩阵,复制参数

时间:2013-05-23 19:29:43

标签: python scipy sparse-matrix

复制参数在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

由于

1 个答案:

答案 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])