Python 按价值或参照my_ndarray[…]
我尝试按值复制Python 按价值或参照my_ndarray[…],python,arrays,numpy,Python,Arrays,Numpy,我尝试按值复制numpy.ndarray,方法如下: my_copy = my_original[...] 然而,这似乎分配了参考 虽然以下方法实际上复制了数据: my_copy[...] = my_original 这让我很困惑,因为我一直认为[…]只会引用普通数据,所以这两种方法都应该有效 这些行为的具体规则和原因是什么?在Numpy中复制数据的最佳实践是什么?您混合了两个概念,第一个: y = x[...] 只需将x的视图分配给变量名yx和y不相同,但它们共享相同的内存(因此更改将传
numpy.ndarray
,方法如下:
my_copy = my_original[...]
然而,这似乎分配了参考
虽然以下方法实际上复制了数据:
my_copy[...] = my_original
这让我很困惑,因为我一直认为[…]
只会引用普通数据,所以这两种方法都应该有效
这些行为的具体规则和原因是什么?在Numpy中复制数据的最佳实践是什么?您混合了两个概念,第一个:
y = x[...]
只需将x
的视图分配给变量名y
x
和y
不相同,但它们共享相同的内存(因此更改将传播到另一个内存)
将x
的值指定给现有数组y
。如果x
和y
不共享内存,这将复制这些值
一般来说,当您想要创建数组的新副本时,应该只使用
np.copy
或np.ndarray.copy
。如果要将数组复制到现有数组中,则需要确保不会丢失对要将值复制到的数组的引用。因此,您不能重新分配变量名(因此y[:]=x
或y[…]=x
很好,因为您处理的是y
的内容,但是y=x
只是“覆盖”变量名,它不会修改原始y
的内容。)您混合了两个概念,第一个:
y = x[...]
只需将x
的视图分配给变量名y
x
和y
不相同,但它们共享相同的内存(因此更改将传播到另一个内存)
将x
的值指定给现有数组y
。如果x
和y
不共享内存,这将复制这些值
一般来说,当您想要创建数组的新副本时,应该只使用np.copy
或np.ndarray.copy
。如果要将数组复制到现有数组中,则需要确保不会丢失对要将值复制到的数组的引用。因此,您不能将重新分配给变量名(因此y[:]=x
或y[…]=x
是可以的,因为您处理的是y
的内容,但是y=x
只是“覆盖”变量名,它不会修改原始y
的内容)