首先让检查concatenate
套路:
A = np.arange(1E4)
#Baseline
%timeit np.concatenate((A,A))
100000 loops, best of 3: 11.1 µs per loop
%timeit np.hstack((A,A))
10000 loops, best of 3: 20.9 µs per loop
%timeit np.append(A,A)
100000 loops, best of 3: 19 µs per loop
请注意,这只是针对小数组,append
,hstack
的情况下,和concatenate
应随着所有这些函数调用concatenate
渐近收敛,主要区别是python开销。现在唯一的问题是如何创建数组B
:
#Using python
%timeit np.concatenate((A,[5]*10000))
1000 loops, best of 3: 1.1 ms per loop
#Tile small array
%timeit C = np.concatenate((A, np.tile(np.array(5),1E4)))
10000 loops, best of 3: 92.1 µs per loop
#Create an array of ones and multiply by a number
%timeit np.concatenate((A,np.ones(1E4)*5))
10000 loops, best of 3: 39.5 µs per loop
#Create empty array and fill from A and then set
%timeit C = np.empty(2E4); C[:10000]=A; C[10000:]=5
100000 loops, best of 3: 16.8 µs per loop
貌似我们的获奖者是:创建一个空数组,然后设置元素。这是假设一个特定的数组大小,但其中大部分应该相似地缩放。
*备注*:事实上,在我的代码B中是A('B = A [-1000:]')的视图,但我认为这不是重要的,它应该在更一般的情况下工作其中B是任何阵列。 – Basj