我注意到SciPy稀疏矩阵和numpy数组在传递到函数时被修改的方式明显不一致。特别是,我想知道是否有人能解释为什么下面的a
稀疏矩阵没有被func
全局修改,而b
数组是:
from scipy import sparse
import numpy as np
def func(m):
m += m
a = sparse.identity(2)
b = np.array([1, 2])
print(a.todense()) # [[1,0],[0,1]]
func(a)
print(a.todense()) # Still [[1,0],[0,1]]. Why???
print(b) # [1, 2]
func(b)
print(b) # Now [2, 4]
1条答案
按热度按时间lbsnaicq1#
+=
在阵列中就地操作对于稀疏矩阵,它会创建一个新的稀疏矩阵对象,而不会就地修改矩阵。
对于此操作,可以就地修改
data
属性:但是一般来说,在稀疏矩阵中添加一些东西可以修改它的稀疏性。稀疏矩阵开发人员认为,在不创建新矩阵的情况下,这样做是不可能的,或者是不划算的(编程或运行时间?)。
虽然稀疏矩阵是在
np.matrix
子类上模式化的,但它不是ndarray
的子类,并且没有义务以完全相同的方式表现。