Nupy矩阵的复制问题
简单记录一下最近遇到的一个bug,利用numpy生成的矩阵在复制时不能直接赋值,而是要用copy
方法。直接赋值类似于把内存中的地址 (即指针) 给了目标变量,其与被赋值变量共享同一块内存,这样做可以节省内存空间。而copy
则不同,会重新申请一块内存,分配给复制后的新变量,在该变量上的操作不会对愿变量产生影响。
下面看一个例子,12345678910import numpy as npx = np.arange(9.).reshape(3,3)# copyy = x.copy()y[y>=5] = 0# 赋值法z = xz[z>=5] = 0
其输出结果如下,1234567891011121314151617181920212223In [6]: yOut[6]: array([[0, 1, 2], [3, 4, 0], [0, 0, 0]])In [7]: xOut[7]: array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])In [8]: zOut[8]: array([[0, 1, 2], [3, 4, 0], [0, 0, 0]])In [9]: xOut[9]: array([[0, 1, 2], [3, 4, 0], [0, 0, 0]])
可以看到,采用copy
后,对y
的操作不会影响到原矩阵x
,而采用直接赋值后,对z
的操作对x
产生了影响。