给定矩阵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在内的多个功能,但无法正常工作。

最佳答案

在这种情况下,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]])

关于python - 将hstack应用于矩阵数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56209401/

10-11 09:02