交织两个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])
更重要的是这适用于a
和b
任意形状
你也可以尝试一下dstack
>>> a = array([1,3,5]) >>> b = array([2,4,6]) >>> dstack((a,b)).flatten() >>> array([1, 2, 3, 4, 5, 6])
你现在有select!