带拷贝的数组赋值

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

下列方法之间的区别是什么? 什么时候分配额外的内存,什么时候不分配?

  1. B = A
  2. B[:] = A(与 B[:]=A[:]相同?)
  3. numpy.copy(B, A)
79513 次浏览
  1. B=A创建一个引用
  2. B[:]=A复制了一份
  3. numpy.copy(B,A)复制了一份

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

要进行深度复制,需要使用 B = copy.deepcopy(A)

这三个版本都有不同的功能:

  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?

对我来说,这是唯一可行的答案:

B=numpy.array(A)