NumPy 轮流连接

NumPy concat by turns

如何轮流组合2个数组来自

arr_1 = np.full((5,), 0)
arr_2 = np.full((5,), 1)

[0,1,0,1,0,1,0,1,0,1]

谢谢!

你可以这样做:

import numpy as np
a = np.array([0, 1])
repeated = np.tile(a, 5)

结果:

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

Documentation.

给定两个数组,你可以堆叠然后转置它们。然后把它弄平:

import numpy as np

arr_1 = np.full((5,), 0)
arr_2 = np.full((5,), 1)

np.stack([arr_1, arr_2]).T.ravel()
#array([0, 1, 0, 1, 0, 1, 0, 1, 0, 1])

这通过第一次堆叠工作:

np.stack([arr_1, arr_2])
# array([[0, 0, 0, 0, 0],
#        [1, 1, 1, 1, 1]])

然后转置:

np.stack([arr_1, arr_2]).T
# array([[0, 1],
#        [0, 1],
#        [0, 1],
#        [0, 1],
#        [0, 1]])

然后 ravel() 从连续的展平数组中读取它们。

编辑

正如 Nin17 在评论中指出的那样 stack() 采用 axis 参数,这避免了转置:

np.stack([arr_1, arr_2], 1).ravel()
# array([0, 1, 0, 1, 0, 1, 0, 1, 0, 1])

这是一个不错的性能改进。