使用numpy时,list的等价物是什么?

时间:2016-08-24 18:31:12

标签: python numpy

当我想要复制列表而不链接到同一个对象时,我必须调用list。所以:

a = [1, 2, 3]
b = list(a)

a == b
True

a is b
False

当我有一个numpy数组时,等价物是什么

import numpy
a = numpy.ones(4)

b = XXX(a)?

提前致谢

2 个答案:

答案 0 :(得分:3)

使用copy - 方法:

b = a.copy()

答案 1 :(得分:-1)

您可以使用[:]模式复制数组或列表(实际上,仅用于列表而不是数组。请参阅下面的更新。)

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())。