python - Numpy 赋值给 slice,什么时候复制数组

标签 python numpy

因此,使用 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/

相关文章:

python - TIC TAC TOE 仅接受整数

python - 是否可以生成Jupyter笔记本的可执行文件(.exe)?

python - 我沿着椭圆形有一组点。如何创建填充的二进制掩码

python - 如何使用最新版本的 Pandas 进行 OLS 回归

python - Numpy 有效的对抗所有人

java - 如何将一种语言(例如 python)绑定(bind)到另一种语言(例如 C++)?

python - 当 Sprite 超过 10 个时,如何处理多个 Sprite 碰撞?

Python:检查 Facebook 用户是否已授予访问我的应用程序的权限。 "HTTP Error 400: Bad Request"失败

numpy - 使用 Python/iPython 的网络绘图错误

python - 在 numpy 数组上计算自定义函数会导致 UnpicklingError : NEWOBJ class argument has NULL tp_new