将hstack应用于矩阵数组

时间:2019-05-19 15:43:27

标签: python numpy

给出一个矩阵数组matrices_w,我想在每个矩阵上应用np.hstack函数:

matrices_w = np.asarray([[[1,2,3],[4,5,6]],[[9,8,7],[6,5,4]]])
array([[[1, 2, 3],
        [4, 5, 6]],

       [[9, 8, 7],
        [6, 5, 4]]])

使得期望的结果由以下方式给出:

array([[1, 2, 3, 4, 5, 6],
       [9, 8, 7, 6, 5, 4]])

到目前为止,我已经尝试了多个功能,包括np.apply_along_axis,但无法正常工作。

1 个答案:

答案 0 :(得分:3)

在这种情况下,reshape是最简单,最快的方法。但找出hstack为何无效的原因可能值得。

In [192]: arr = np.array([[[1,2,3],[4,5,6]],[[9,8,7],[6,5,4]]])              

hstack运行,但产生不同的顺序:

In [193]: np.hstack(arr)                                                     
Out[193]: 
array([[1, 2, 3, 9, 8, 7],
       [4, 5, 6, 6, 5, 4]])

这是因为hstack将数组的第一维视为列表,然后将两个数组连接在一起:

In [194]: np.concatenate([arr[0],arr[1]], axis=-1)                           
Out[194]: 
array([[1, 2, 3, 9, 8, 7],
       [4, 5, 6, 6, 5, 4]])

如果将其拆分为第二维上的列表,则会得到您想要的顺序:

In [195]: np.concatenate([arr[:,0],arr[:,1]], axis=-1)                       
Out[195]: 
array([[1, 2, 3, 4, 5, 6],
       [9, 8, 7, 6, 5, 4]])