Python / Numpy-在1D数组的每个“行”中合并2个项目

时间:2020-06-09 09:40:21

标签: python arrays numpy merge concatenation

我有一个简短的问题:

我有一个像这样的数组:

array([('A', 'B'),
       ('C', 'D'),
      dtype=[('group1', '<U4'), ('group2', '<U4')])

我想像这样将group1group2合并为1:

array([('A_B'),
       ('C_D'),
      dtype=[('group3', '<U4')])

我尝试了与其他答案不同的方法,例如:

array_test = np.array([])
for group in array_test:
    combi = np.append(combi,np.array(group[0]+"_"+group[1]))

这确实为我提供了一个我想要的新数组,但是当我尝试将其添加到数组中时,出现一个错误,我无法弄清(不真正知道它的含义):

np.append(test_array, combi, axis=1)

numpy.AxisError: axis 1 is out of bounds for array of dimension 1

我也尝试了concaternate的其他方法,但是它给出了相同的错误

有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

该错误表示您尝试沿着第二维(shape(n,))将一维数组(axis=1)附加到另一个一维数组,这是不可能的,因为您的数组只有一个维。

但是,如果不指定轴(或axis=0),则最终只能得到像array(['A_B', 'C_D'])这样的一维数组。要获得请求的结构化数组,您需要创建一个新数组,例如np.array(combi, dtype=[('group3', '<U4')])

您可以不循环地进行相同的矢量化处理:

np.array(np.char.add(np.char.add(a['group1'], '_'), a['group2']), dtype=[('group3', '<U4')])