Python 压缩稀疏行矩阵::csr_矩阵::奇数行为
我在代码中观察到一些奇怪的行为,这些行为一直困扰着我。以下是Python 压缩稀疏行矩阵::csr_矩阵::奇数行为,python,python-3.x,sparse-matrix,Python,Python 3.x,Sparse Matrix,我在代码中观察到一些奇怪的行为,这些行为一直困扰着我。以下是 from scipy.sparse import csr_matrix A = csr_matrix([[1,2,0],[0,0,3],[4,0,5]]) B = A B[0,0] = 99 我希望A.toarray()返回原始矩阵(没有更新的99值),但实际上我得到了这个结果 A.toarray() Out: array([[99, 2, 0], [ 0, 0, 3], [ 4, 0, 5
from scipy.sparse import csr_matrix
A = csr_matrix([[1,2,0],[0,0,3],[4,0,5]])
B = A
B[0,0] = 99
我希望A.toarray()
返回原始矩阵(没有更新的99值),但实际上我得到了这个结果
A.toarray()
Out:
array([[99, 2, 0],
[ 0, 0, 3],
[ 4, 0, 5]], dtype=int32)
发生了什么事?语句
b=a
给出了b
与a
相同的参考
i、 例如,它们都引用内存中的同一对象
对其中一项所做的任何更改显然都会反映在另一项中,因为它们是相同的,而不仅仅是相等的
相反,请使用
b=a.copy()
。这将传递给b
一份a语句b=a
的副本b
提供了与a
相同的引用
i、 例如,它们都引用内存中的同一对象
对其中一项所做的任何更改显然都会反映在另一项中,因为它们是相同的,而不仅仅是相等的
相反,请使用b=a.copy()
。这传递到b
的a
a
和b
是指向内存中相同对象的指针<代码>A为B
应返回True。使用方法id(obj)
获取对象的内存地址。id(A)和id(B)的结果应该是相同的。这似乎并不取决于A是稀疏矩阵。您将在任何容器类型中看到这种行为。B=A将对同一对象的引用分配给B。由于这些对象在适当位置发生了更改B[0,0]=
和A[0,0]=
在这里完全等效A
和B
是指向内存中同一对象的指针<代码>A为B应返回True。使用方法id(obj)
获取对象的内存地址。id(A)和id(B)的结果应该是相同的。这似乎并不取决于A是稀疏矩阵。您将在任何容器类型中看到这种行为。B=A将对同一对象的引用指定给B。由于这些对象在适当位置发生了更改B[0,0]=
和A[0,0]=
在这里完全等效