因此,使用 numpy 数组将一个数组分配给另一个数组只是复制引用: 即
import numpy as np
x = np.array([5,8])
y = x
y += 1
x
Out: array([6, 9])
如果我想要深拷贝,那么我应该使用x.copy()
。从更高维数组中取出 View 时也是如此,例如
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数组?是否有任何规则可以决定何时在赋值时对数组进行深度复制?
最佳答案
当你在做的时候
b=A[:,1]
它正在创建对底层数组的引用。 但在这种情况下
A[:,0] = b
仅复制值。因此,在最后一条语句中,第一列保持不变,而 b 仍引用的第二列发生变化。 Take a look at this
关于python - Numpy 赋值给 slice,什么时候复制数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29244299/