Numpy分配给切片,何时复制数组

时间:2015-03-24 22:45:22

标签: python numpy

因此,使用numpy数组分配一个到另一个只复制引用: 即。

import numpy as np
x = np.array([5,8])
y = x 
y += 1
x
Out: array([6, 9])

如果我想要一份深层副本,那么我应该使用x.copy()。从更高维数组中获取视图时也是如此,例如

A=np.array([[4,10],[8,1]])
b=A[:,1]
b+=1
A
Out: array([[ 4, 11],
            [ 8,  2]])

反之亦然(从上面继续):

A[:,1]=b
b
Out: array([11,  2])
b+=1
A
Out: array([[ 4, 12],
            [ 8,  3]])

所以到目前为止一切都在努力。但现在,如果我继续并做:

A[:,0] = b
A
Out: array([[12, 12],
            [ 3,  3]])
b
Out: array([12,  3])
b+=1
A
Out: array([[12, 13],
            [ 3,  4]])

我不明白为什么第一列保持不变而另一列不相同?为什么第二列继续指向b数组?是否有任何规则可以决定何时在分配时深度复制数组?

1 个答案:

答案 0 :(得分:3)

当你做的时候

b=A[:,1]

它正在创建对底层数组的引用。 但在这种情况下

A[:,0] = b

仅复制值。因此,在最后一个语句中,第一列保持不变,而仍然被b引用的第二列发生更改。 Take a look at this