首页 文章

Numpy数组赋值与副本

提问于
浏览
76

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

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

  • B = A

  • B[:] = A (与 B[:]=A[:] 相同?)

  • numpy.copy(B, A)

3 回答

  • 95

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

    • B = A

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

    • B[:] = A (与 B[:]=A[:] 相同?)

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

    • numpy.copy(B, A)

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

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

  • 26
    • B=A 创建引用

    • B[:]=A 制作副本

    • numpy.copy(B,A) 复制

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

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

  • 5

    这是我唯一可行的答案:

    B=numpy.array(A)
    

相关问题