Numpy数组赋值与副本

时间:2013-10-30 07:44:25

标签: python arrays numpy

例如,如果我们有一个numpy数组A,我们希望numpy数组B具有相同的元素。

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

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

3 个答案:

答案 0 :(得分:98)

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

  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?

答案 1 :(得分:27)

  1. B=A创建参考
  2. B[:]=A制作副本
  3. numpy.copy(B,A)制作副本
  4. 最后两个需要额外的内存。

    要制作深层副本,您需要使用B = copy.deepcopy(A)

答案 2 :(得分:6)

这是我唯一可行的答案:

B=numpy.array(A)