将两个数组中的元素配对组合

9

我想把两个数组按照成对的方式进行连接。输入如下:

a = array([1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])
b = array([0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0])

输出应如下所示:
out_put = 
[[1, 0],
[1, 0],
[0, 1],
[1, 0],
[0, 1],
[0, 1],
[0, 1],
[0, 1],
[0, 1],
[0, 1],
[0, 1],
[0, 1],
[0, 1],
[0, 1],
[1, 0]]

通过迭代两个数组,我成功地得到了这样的结果。

out_put = [[a[i],b[i]] for i in range(len(a)]

但我想知道是否有更快的方法。

谢谢。

3个回答

8

对于矢量化解决方案,您可以堆叠和转置:

a = np.array([1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])
b = np.array([0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0])

c = np.vstack((a, b)).T
# or, c = np.dstack((a, b))[0]

array([[1, 0],
       [1, 0],
       [0, 1],
       [1, 0],
       [0, 1],
       [0, 1],
       [0, 1],
       [0, 1],
       [0, 1],
       [0, 1],
       [0, 1],
       [0, 1],
       [0, 1],
       [0, 1],
       [1, 0]])

1
或者只需使用 np.dstack((a, b)),尽管它只是一个连接的包装器。 - Brad Solomon
@BradSolomon,谢谢,我认为你还需要用该解决方案的[0]索引。 - jpp
2
@BradSolomon column_stackdstack,但不会为 2 个 1D 数组添加额外的维度。 - user3483203

5

使用np.column_stack将1-D数组堆叠为2-D数组的列。

将1-D数组作为列堆叠到2-D数组中。

np.column_stack((a, b))

array([[1, 0],  
       [1, 0],  
       [0, 1],  
       [1, 0],  
       [0, 1],  
       [0, 1],  
       [0, 1],  
       [0, 1],  
       [0, 1],  
       [0, 1],  
       [0, 1],  
       [0, 1],  
       [0, 1],  
       [0, 1],  
       [1, 0]]) 

3
你可以使用zip函数来将任意两个可迭代对象组合在一起。它会一直执行,直到到达较短的可迭代对象的末尾。
list(zip(a, b))
# [(1, 0), (1, 0), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (1, 0)]

注意:zip和NumPy数组实际上是低效的:请参见此答案 - jpp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接