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])
给定两个数组,你可以堆叠然后转置它们。然后把它弄平:
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])
这是一个不错的性能改进。
如何轮流组合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])
给定两个数组,你可以堆叠然后转置它们。然后把它弄平:
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])
这是一个不错的性能改进。