将两个一维数组转换为二维数组

Turning two one dimensional arrays into a 2 dimensional array

我想编写一个代码,将 a, b, cunix_a, unix_b, unix_c 组合成一个多维数组。 Long 会变成 1Short 会变成 0。零和一将占据第一列,第二列将只是 unix_ 值,就像:[[1 1624580882]]。我怎样才能得到我的 Expected Output

import numpy as np 

a=np.array(["Short","Long","Short","Long","Short","Long"])
b=np.array(["Long","Long","Long","Long"])
c=np.array(["Short","Long","Short","Long","Short","Long"])

unix_a=np.array([1624580882,1624584458,1624589467,1624592213,1624595336,1624596349])
unix_b=np.array([1624580882,1624584458,1624595336,1624596349])
unix_c=np.array([1624580882,1624584464,1624589495,1624592238,1624595350,1624596380])

预期输出:

[[0 1624580882], [1 1624584458], [0 1624589467], [1 1624592213], [0 1624595336], [1 1624596349]]

[[1 1624580882], [1 1624584458], [1 1624595336], [1 1624596349]]

[[0 1624580882], [1 1624584464], [0 1624589495], [1 1624592238], [0 1624595350], [1 1624596380]]

如果你想要一个列表,你可以使用列表理解:

[(0 if a=="Short" else 1, b) for a,b in zip(a,unix_a)]

输出:

[(0, 1624580882),
 (1, 1624584458),
 (0, 1624589467),
 (1, 1624592213),
 (0, 1624595336),
 (1, 1624596349)]

如果你想要一个二维 numpy 数组:

np.array([(a=="Long").astype(int), unix_a]).T

输出:

array([[         0, 1624580882],
       [         1, 1624584458],
       [         0, 1624589467],
       [         1, 1624592213],
       [         0, 1624595336],
       [         1, 1624596349]])

全部转换:

out_a, out_b, out_c = [np.array([(x[0]=="Long").astype(int), x[1]]).T
                       for x in [(a, unix_a), (b, unix_b), (c, unix_c)]]

您可以使用 np.c_:

np.c_[a=='Long',unix_a]