2

What is the function of copy argument in construction of scipy sparse arrays?

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

It doesn't seem to do anything!

When I construct a sparse matrix from another one and explicitly set copy=False, changing one matrix does not change the other.

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

Thanks

4

1 回答 1

2

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])
于 2013-05-31T20:06:20.197 回答