【问题标题】:3d Numpy array to 2d3d Numpy 数组到 2d
【发布时间】:2012-12-09 01:16:19
【问题描述】:

我有一个像这样的 3d 矩阵

arange(16).reshape((4,2,2))
array([[[ 0,  1],
        [ 2,  3]],

        [[ 4,  5],
        [ 6,  7]],

        [[ 8,  9],
        [10, 11]],

        [[12, 13],
        [14, 15]]])

并希望以网格格式堆叠它们,以

结尾
array([[ 0,  1,  4,  5],
       [ 2,  3,  6,  7],
       [ 8,  9, 12, 13],
       [10, 11, 14, 15]])

有没有一种方法可以不显式地对它们进行 hstacking(和/或 vstacking)或添加额外的维度和重塑(不确定这是否可行)?

谢谢,

【问题讨论】:

    标签: python numpy multidimensional-array


    【解决方案1】:
    In [27]: x = np.arange(16).reshape((4,2,2))
    
    In [28]: x.reshape(2,2,2,2).swapaxes(1,2).reshape(4,-1)
    Out[28]: 
    array([[ 0,  1,  4,  5],
           [ 2,  3,  6,  7],
           [ 8,  9, 12, 13],
           [10, 11, 14, 15]])
    

    我已经为reshaping/unshaping arrays into blocks, here 发布了更多通用函数。

    【讨论】:

    • 好的,所以考虑到我有 N 个具有 bm x bn 维度的块矩阵并希望将它们堆叠在 m x n 矩阵中,提供 N = m x n,然后我将拥有 x.reshape(m,n,bm,bn).swapaxes(1,2).reshape(bm*m,-1) 只是想知道如果有任何为此目的的numpy函数。再次感谢@unutbu。
    • @unutbu:嗯,我同意 EOL 的观点,这是一个非常优雅的技巧,在 4D 中交换轴是完成任务的一种非常酷的方式!
    • @unutbu:很高兴知道这样的解决方案需要一些思考。 :) 我确实注意到您的解决方案是您的第 27 个 shell 输入,所以我猜想获得它并不容易。 :) 很高兴得到确认。
    • 你可以看看吗?谢谢。
    猜你喜欢
    • 2012-12-31
    • 2019-01-11
    • 1970-01-01
    • 2019-07-10
    • 2016-04-07
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多