视图和副本的含义是不同的,如果您有视图,那么如果您更改了1,则另一个也应该更改;如果您有一个副本,则更改1不应影响到另一个视图。
生成数组的view/copy的方法有三种
arr_2 = arr
arr_2 = arr.view()
arr_2 = arr.copy()他们三个似乎都返回了一个副本,我希望(视图,视图,副本)
为什么会这样呢?
编辑:我所说的copy的意思是,改变其中的任何一个不会改变另一个
我所说的view的意思是,改变乙醚1会改变另一个
发布于 2021-11-24 08:47:04
In [488]: arr = np.array([1,2,3,4])
In [489]: arr2 = arr更改arr2的元素也会更改arr,因为变量引用相同的数组:
In [490]: arr2[0]=100
In [491]: arr
Out[491]: array([100, 2, 3, 4])执行arr2=np.array([3,4])将为arr2分配一个全新的数组,并删除它们通过489进行的任何连接。对于视图/副本来说,这不是一个有用的测试。
制作view
In [492]: arr2 = arr.reshape(2,2)
In [493]: arr2
Out[493]:
array([[100, 2],
[ 3, 4]])
In [494]: arr2[0,0] = 200
In [495]: arr
Out[495]: array([200, 2, 3, 4])arr2有一个不同的形状,但它仍然与arr共享数据缓冲区。我没有使用arr.view(),因为很少使用它;它没有做任何重要的事情。阅读view文档以了解原因。
副本使用自己的数据缓冲区生成一个新数组:
In [496]: arr2 = arr.copy()
In [497]: arr2[0] = 50
In [498]: arr2
Out[498]: array([50, 2, 3, 4])
In [499]: arr
Out[499]: array([200, 2, 3, 4])arr2=np.array(arr)也将复制一份。比较它的文档和np.asarray。
发布于 2021-11-23 08:08:21
在python中复制数组的三种方法
https://stackoverflow.com/questions/70076965
复制相似问题