Gab*_*iel 10 python arrays numpy
列表有一个非常简单的方法来插入元素:
a = [1,2,3,4]
a.insert(2,66)
print a
[1, 2, 66, 3, 4]
Run Code Online (Sandbox Code Playgroud)
对于numpy
我可以做的数组:
a = np.asarray([1,2,3,4])
a_l = a.tolist()
a_l.insert(2,66)
a = np.asarray(a_l)
print a
[1 2 66 3 4]
Run Code Online (Sandbox Code Playgroud)
但这非常令人费解.
是否有数组的insert
等价物numpy
?
Ash*_*ary 17
您可以使用numpy.insert
,但不像list.insert
它返回一个新数组,因为NumPy中的数组具有固定大小.
>>> import numpy as np
>>> a = np.asarray([1,2,3,4])
>>> np.insert(a, 2, 66)
array([ 1, 2, 66, 3, 4])
Run Code Online (Sandbox Code Playgroud)
如果您只想在后续索引中插入项目,可以使用更优化的方法np.concatenate()
将数组的切片与预期项目连接起来:
例如,在这种情况下,你可以这样做:
In [21]: np.concatenate((a[:2], [66], a[2:]))
Out[21]: array([ 1, 2, 66, 3, 4])
Run Code Online (Sandbox Code Playgroud)
基准(比时间快5倍insert
):
In [19]: %timeit np.concatenate((a[:2], [66], a[2:]))
1000000 loops, best of 3: 1.43 us per loop
In [20]: %timeit np.insert(a, 2, 66)
100000 loops, best of 3: 6.86 us per loop
Run Code Online (Sandbox Code Playgroud)
这是一个更大阵列的基准测试(仍然快5倍):
In [22]: a = np.arange(1000)
In [23]: %timeit np.concatenate((a[:300], [66], a[300:]))
1000000 loops, best of 3: 1.73 us per loop
In [24]: %timeit np.insert(a, 300, 66)
100000 loops, best of 3: 7.72 us per loop
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
38414 次 |
最近记录: |