NumPy Matrix操作无需复制

时间:2013-05-06 20:32:53

标签: python numpy

如何制作矩阵转置,而不制作矩阵对象的副本?同样,作为其他矩阵运算(从矩阵中减去矩阵,......)。这样做有益吗?

2 个答案:

答案 0 :(得分:10)

进行数组的转置不会复制:

>>> a = np.arange(9).reshape(3,3)
>>> b = np.transpose(a)
>>> a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> b
array([[0, 3, 6],
       [1, 4, 7],
       [2, 5, 8]])
>>> b[0,1] = 100
>>> b
array([[  0, 100,   6],
       [  1,   4,   7],
       [  2,   5,   8]])
>>> a
array([[  0,   1,   2],
       [100,   4,   5],
       [  6,   7,   8]])

同样适用于numpy.matrix对象。

如果您希望通过复制非常大的数组来避免不必要地占用大量内存,那么可以。但是在修改转置时,你还必须小心避免无意中修改原始数组(如果你仍然需要它)。

许多numpy函数接受一个可选的“out”关键字(例如,numpy.dot)来将输出写入现有数组。例如,要将a的矩阵乘积与自身对齐,并将输出写入现有数组c

numpy.dot(a, a, out=c)

答案 1 :(得分:4)

b = a.T中的转置操作会创建浅表副本。 ab将共享相同的数据。

对于算术运算,请参阅:- vs -= operators with numpy

浅拷贝有利于有效地使用内存。但是,您必须记住,更改值将影响所有副本。