与副本的Numpy数组赋值

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

这些方法有什么区别? 何时分配额外内存,何时不是?

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

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

  1. 这将新名称B绑定到已命名为A的现有对象。 之后,他们指的是同一个对象,所以如果你修改了一个对象,你也会看到另一个对象的变化。

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

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

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

  1. B=A创build一个参考
  2. B[:]=A进行深层复制
  3. numpy.copy(B,A)复制

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

编辑:看看这个问题

这是我唯一的工作答案:

 B=numpy.array(A)