当我想复制一个列表而不链接到同一个对象时,我必须调用列表。所以:使用numpy时,列表的等价物是什么?
a = [1, 2, 3]
b = list(a)
a == b
True
a is b
False
什么是等效的,当我有一个numpy的阵列
import numpy
a = numpy.ones(4)
b = XXX(a)?
在此先感谢
当我想复制一个列表而不链接到同一个对象时,我必须调用列表。所以:使用numpy时,列表的等价物是什么?
a = [1, 2, 3]
b = list(a)
a == b
True
a is b
False
什么是等效的,当我有一个numpy的阵列
import numpy
a = numpy.ones(4)
b = XXX(a)?
在此先感谢
使用copy
-method:
b = a.copy()
可以使用[:]
模式来复制一个数组或列表(实际上,只是对于列表而不是数组,请参见下面的更新)。
a = np.ones(4)
b = a[:]
>>> b
array([ 1., 1., 1., 1.])
>>> id(a)
4606143744
>>> id(b)
4606143984
时序
a = np.random.randn(1000000)
%timeit -n 1000 a.copy()
1000 loops, best of 3: 1.1 ms per loop
%timeit -n 1000 a[:]
1000 loops, best of 3: 659 ns per loop
更新
我通常会删除错误帖子这样,但我离开它,因为我认为这是有益的。
按照列表的预期工作。
a = [1, 2, 3]
b = a[:]
b[2] = 0
>>> a
[1, 2, 3]
>>> b
[1, 2, 0]
但正如@ Divakar指出,这似乎并不为numpy的阵列工作:
a = np.array([1, 2, 3])
b = a[:]
b[2] = 0
>>> a
array([1, 2, 0])
>>> b
array([1, 2, 0])
>>> id(a)
4600986400
>>> id(b)
4606142624
最好明确使用copy()
方法(例如b = a.copy()
)。
[ndarray.copy()](http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.copy.html) ? – Divakar
在Python 3中,'list'对象也有一个'copy'方法,为了清晰的目的,我认为它击败了所有其他的方法。 –