例如,如果我们有一个 numpy数组 A,并且我们想要一个具有相同元素的 numpy数组 B。
numpy
A
B
下列方法之间的区别是什么? 什么时候分配额外的内存,什么时候不分配?
B = A
B[:] = A
B[:]=A[:]
numpy.copy(B, A)
B=A
B[:]=A
numpy.copy(B,A)
最后两个需要额外的内存。
要进行深度复制,需要使用 B = copy.deepcopy(A)
B = copy.deepcopy(A)
这三个版本都有不同的功能:
这将一个新名称 B绑定到已经命名为 A的现有对象。之后,它们引用同一个对象,因此如果在适当的位置修改一个对象,您也将通过另一个对象看到更改。
B[:] = A(与 B[:]=A[:]相同?)
这会将 A中的值复制到现有的数组 B中。这两个数组必须具有相同的形状才能工作。B[:] = A[:]做同样的事情(但是 B = A[:]会做类似于1的事情)。
B[:] = A[:]
B = A[:]
这不是法律语法。你说的可能是 B = numpy.copy(A)。这几乎与2相同,但它创建了一个新数组,而不是重用 B数组。如果没有其他参考以前的 B值,最终结果将是相同的2,但它将使用更多的内存临时在复制。
B = numpy.copy(A)
或者你指的是 numpy.copyto(B, A),这是合法的,相当于2?
numpy.copyto(B, A)
对我来说,这是唯一可行的答案:
B=numpy.array(A)