我尝试按值复制numpy.ndarray
,方法如下:
my_copy = my_original[...]
然而,这似乎分配了参考。
虽然以下方式确实会复制数据:
my_copy[...] = my_original
这让我感到困惑,因为我总是认为[...]
只会引用普通数据,所以两种方式都应该有效。
这些行为的规则和原因究竟是什么?在Numpy中复制数据的最佳做法是什么?
答案 0 :(得分:3)
你混合了两个概念,第一个:
y = x[...]
只需将x
的视图分配给变量名称y
即可。 x
和y
不相同,但它们共享相同的内存(因此更改将传播到另一个内存)。
y[...] = x
将x
的值分配给现有数组y
。如果x
和y
不共享内存,则会复制值。
一般情况下,当您想要创建数组的新副本时,您应该使用np.copy
或np.ndarray.copy
。如果要将数组复制到现有数组,则需要确保不会丢失要将值复制到的数组的引用。因此,您不得重新分配给变量名称(因此y[:] = x
或y[...] = x
是正常的,因为您处理y
的内容 - 但是{{1只是“覆盖”变量名称,它不会修改原始y = x
的内容。)