by_ value或by-reference with my_ndarray [...]

时间:2017-04-08 11:51:39

标签: python arrays numpy

我尝试按值复制numpy.ndarray,方法如下:

my_copy = my_original[...]

然而,这似乎分配了参考。

虽然以下方式确实会复制数据:

my_copy[...] = my_original

这让我感到困惑,因为我总是认为[...]只会引用普通数据,所以两种方式都应该有效。

这些行为的规则和原因究竟是什么?在Numpy中复制数据的最佳做法是什么?

1 个答案:

答案 0 :(得分:3)

你混合了两个概念,第一个:

y = x[...]

只需将x视图分配给变量名称y即可。 xy不相同,但它们共享相同的内存(因此更改将传播到另一个内存)。

y[...] = x

x的值分配给现有数组y。如果xy不共享内存,则会复制值。

一般情况下,当您想要创建数组的新副本时,您应该使用np.copynp.ndarray.copy。如果要将数组复制到现有数组,则需要确保不会丢失要将值复制到的数组的引用。因此,您不得重新分配给变量名称(因此y[:] = xy[...] = x是正常的,因为您处理y的内容 - 但是{{1只是“覆盖”变量名称,它不会修改原始y = x的内容。)