125

例如,如果我们有一个numpy数组A,并且我们想要一个具有相同元素的numpy数组。B

以下(见下文)方法有什么区别?什么时候分配额外的内存,什么时候不分配?

  1. B = A
  2. B[:] = A(同B[:]=A[:]?)
  3. numpy.copy(B, A)
4

3 回答 3

153

所有三个版本都做不同的事情:

  1. B = A

    这会将新名称绑定B到已命名的现有对象A。之后它们引用同一个对象,因此如果您修改一个对象,您也会通过另一个对象看到更改。

  2. B[:] = A(同B[:]=A[:]?)

    这会将值复制A到现有数组B中。这两个数组必须具有相同的形状才能工作。B[:] = A[:]做同样的事情(但B = A[:]会做更像1的事情)。

  3. numpy.copy(B, A)

    这不是合法的语法。你可能的意思是B = numpy.copy(A)。这与 2 几乎相同,但它创建了一个新数组,而不是重用该B数组。如果没有其他对前一个B值的引用,最终结果将与 2 相同,但在复制过程中会暂时使用更多内存。

    或者你的意思是numpy.copyto(B, A),这是合法的,相当于 2?

于 2013-10-30T07:59:38.120 回答
33
  1. B=A创建参考
  2. B[:]=A复印
  3. numpy.copy(B,A)复印

最后两个需要额外的内存。

要制作深拷贝,您需要使用B = copy.deepcopy(A)

于 2013-10-30T07:52:53.483 回答
16

这对我来说是唯一有效的答案:

B=numpy.array(A)
于 2016-09-14T16:18:31.423 回答