例如,如果我们有一个numpy
数组A
,并且我们想要一个具有相同元素的numpy
数组B
。
以下两种方法(见下文)有什么不同?什么时候会分配额外的内存,什么时候不会?
B = A
B[:] = A
(与B[:]=A[:]
?)numpy.copy(B, A)
相同
发布于 2013-10-30 15:59:38
这三个版本做了不同的事情:
B = A
这会将一个新名称B
绑定到已命名为A
的现有对象。之后,它们引用相同的对象,所以如果您就地修改其中一个对象,您将通过另一个too.
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?。
发布于 2013-10-30 15:52:53
B=A
创建referenceB[:]=A
makes a copynumpy.copy(B,A)
makes a copy后两个需要额外的内存。
要制作深度副本,您需要使用B = copy.deepcopy(A)
发布于 2016-09-15 00:18:31
对我来说,这是唯一有效的答案:
B=numpy.array(A)
https://stackoverflow.com/questions/19676538
复制相似问题