c = np.empty(len(a)+len(b), dtype=a.dtype)
c[::2] = a
c[1::2] = b
(假设a 和b 具有相同的dtype。)
你问的是最快的,所以这里做个时序对比(vstack、ravel和empty都是numpy函数):
In [40]: a = np.random.randint(0, 10, size=150)
In [41]: b = np.random.randint(0, 10, size=150)
In [42]: %timeit vstack((a,b)).T.flatten()
100000 loops, best of 3: 5.6 µs per loop
In [43]: %timeit ravel([a, b], order='F')
100000 loops, best of 3: 3.1 µs per loop
In [44]: %timeit c = empty(len(a)+len(b), dtype=a.dtype); c[::2] = a; c[1::2] = b
1000000 loops, best of 3: 1.94 µs per loop
使用vstack((a,b)).T.flatten(),复制a和b创建vstack((a,b)),然后通过flatten()方法再次复制数据。
ravel([a, b], order='F')实现为asarray([a, b]).ravel(order),需要复制a和b,然后复制结果以创建order='F'的数组。 (如果你只做ravel([a, b]),它的速度和我的答案差不多,因为它不必再次复制数据。不幸的是,需要order='F' 来获得交替模式。)
所以其他两种方法复制数据两次。在我的版本中,每个数组都被复制一次。