【问题标题】:Compressed Sparse Row Matrix :: csr_matrix :: odd behaviour压缩稀疏行矩阵 :: csr_matrix :: 奇怪的行为
【发布时间】:2017-07-07 06:42:39
【问题描述】:

我一直在我的代码中观察到一些奇怪的行为,这些行为一直困扰着我。以下...

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)

发生了什么事?

【问题讨论】:

  • AB 是指向内存中同一个对象的指针。 A is B 应该返回 True。使用方法id(obj)获取对象的内存地址。 id(A)id(B)的结果应该是一样的。
  • 这似乎并不取决于 A 是一个稀疏矩阵。您将在任何容器类型中看到此行为。 B=A 将同一对象的引用分配给 B。由于这些已就地更改,B[0,0]=A[0,0]= 在这里完全相同

标签: python python-3.x sparse-matrix


【解决方案1】:

声明b = ab 提供与a 相同的引用。

也就是说,它们都引用内存中的同一个对象。

对其中一个所做的任何更改显然都会反映在另一个上,因为它们是相同的,而不仅仅是相等的。

改为使用b=a.copy()。这将传递给b a 的副本。

【讨论】:

    猜你喜欢
    • 2015-12-05
    • 1970-01-01
    • 2016-12-05
    • 2019-03-12
    • 2015-12-30
    • 2016-10-04
    • 2023-03-25
    • 1970-01-01
    • 2020-07-01
    相关资源
    最近更新 更多