例如,如果我们有一个numpy数组A
,并且我们想要一个具有相同元素的numpy数组B
。Numpy数组赋值与副本
这些方法有什么区别?什么时候分配额外的内存,什么时候不分配?
B = A
B[:] = A
(同B[:]=A[:]
?)numpy.copy(B, A)
例如,如果我们有一个numpy数组A
,并且我们想要一个具有相同元素的numpy数组B
。Numpy数组赋值与副本
这些方法有什么区别?什么时候分配额外的内存,什么时候不分配?
B = A
B[:] = A
(同B[:]=A[:]
?)numpy.copy(B, A)
所有三个版本做不同的事情。
这将一个新名称B
已命名A
现有对象。之后,他们会引用同一个对象,因此如果您修改了某个对象,您也会看到另一个对象的变化。
这会将A
中的值复制到现有阵列B
中。这两个阵列必须具有相同的形状才能工作。 B[:] = A[:]
做同样的事情(但B = A[:]
会做更像1)。
这不是合法的语法。你可能意思是B = numpy.copy(A)
。这与2几乎相同,但它会创建一个新阵列,而不是重新使用B
阵列。如果没有其他引用的值为B
,则最终结果与2相同,但在复制过程中会临时使用更多内存。
编辑:或者你的意思是numpy.copyto(B, A)
,这是合法的,相当于2?
这是我唯一的工作答案:
B=numpy.array(A)
'B = A [:]'_不_做同样的事情在1所有!试试'a = [1,2,3]; b = a [:];在b.append(4);打印(B);打印的(a)'。它定义了一个新的参考并将其复制到其中。 –
@Mr_and_Mrs_D:Numpy数组的工作方式与列表不同。切片数组不会创建副本,只会创建现有数组数据的新视图。 – Blckknght
哦,我纠正了 - 谢谢。让我们在这里保留我的错误,因为许多python程序员会想知道:) –