问题:带副本的numpy数组分配
例如,如果我们有一个numpyarray A,我们想要一个numpy数组B具有相同元素。
以下(见下文)方法之间的区别是什么?什么时候分配额外的内存,什么时候不分配?
B = AB[:] = A(与B[:]=A[:]?相同)numpy.copy(B, A)
回答 0
这三个版本都做不同的事情:
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?
回答 1
B=A创建参考B[:]=A复制numpy.copy(B,A)复制
后两个需要额外的内存。
要制作深拷贝,您需要使用 B = copy.deepcopy(A)
回答 2
这是我唯一的工作答案:
B=numpy.array(A)
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
