交织两个numpy数组

假设给出了以下数组:

a = array([1,3,5]) b = array([2,4,6]) 

如何有效地交织他们,以便得到这样的第三个数组

 c = array([1,2,3,4,5,6]) 

可以假定length(a)==length(b)

我喜欢乔希的回答。 我只是想添加一个更平凡的,通常的,稍微更详细的解决scheme。 我不知道哪个更有效率。 我希望他们会有相似的performance。

 import numpy as np a = np.array([1,3,5]) b = np.array([2,4,6]) c = np.empty((a.size + b.size,), dtype=a.dtype) c[0::2] = a c[1::2] = b 

这是一个单行的:

 c = numpy.vstack((a,b)).reshape((-1,),order='F') 

这是一个比以前更简单的答案

 import numpy as np a = np.array([1,3,5]) b = np.array([2,4,6]) inter = np.ravel(np.column_stack((a,b))) 

之后这个包含:

 array([1, 2, 3, 4, 5, 6]) 

这个答案似乎也稍快一点:

 In [4]: %timeit np.ravel(np.column_stack((a,b))) 100000 loops, best of 3: 6.31 µs per loop In [8]: %timeit np.ravel(np.dstack((a,b))) 100000 loops, best of 3: 7.14 µs per loop In [11]: %timeit np.vstack((a,b)).ravel([-1]) 100000 loops, best of 3: 7.08 µs per loop 

也许这比@JoshAdel的解决scheme更具可读性:

 c = numpy.vstack((a,b)).ravel([-1]) 

这将交错/交错两个数组,我相信这是非常可读的:

 a = np.array([1,3,5]) #=> array([1, 3, 5]) b = np.array([2,4,6]) #=> array([2, 4, 6]) c = np.hstack( zip(a,b) ) #=> array([1, 2, 3, 4, 5, 6]) 

vstack肯定是一个选项,但更简单的解决scheme可能是你的情况是hstack

 >>> a = array([1,3,5]) >>> b = array([2,4,6]) >>> hstack((a,b)) #remember it is a tuple of arrays that this function swallows in. >>> array([1, 3, 5, 2, 4, 6]) >>> sort(hstack((a,b))) >>> array([1, 2, 3, 4, 5, 6]) 

更重要的是这适用于ab任意形状

你也可以尝试一下dstack

 >>> a = array([1,3,5]) >>> b = array([2,4,6]) >>> dstack((a,b)).flatten() >>> array([1, 2, 3, 4, 5, 6]) 

你现在有select!