与副本的Numpy数组赋值
例如,如果我们有一个numpy数组A
,并且我们想要一个具有相同元素的numpy数组B
这些方法有什么区别? 何时分配额外内存,何时不是?
-
B = A
-
B[:] = A
(与B[:]=A[:]
?相同) -
numpy.copy(B, A)
所有三个版本都做不同的事情。
-
这将新名称
B
绑定到已命名为A
的现有对象。 之后,他们指的是同一个对象,所以如果你修改了一个对象,你也会看到另一个对象的变化。 -
这将
A
的值复制到现有的数组B
。 这两个数组必须具有相同的形状才能工作。B[:] = A[:]
做同样的事情(但B = A[:]
会做更像1的事情)。 -
这不是合法的语法。 你可能意思是
B = numpy.copy(A)
。 这几乎与2相同,但它创build一个新的数组,而不是重新使用B
数组。 如果没有其他引用到前一个B
值,最终结果将与2相同,但在复制过程中会临时使用更多的内存。编辑:或者你的意思是
numpy.copyto(B, A)
,这是合法的,相当于2?
-
B=A
创build一个参考 -
B[:]=A
进行深层复制 -
numpy.copy(B,A)
复制
最后两个需要额外的内存。
编辑:看看这个问题
这是我唯一的工作答案:
B=numpy.array(A)