3d Numpy 数组到 2d

Posted

技术标签:

【中文标题】3d Numpy 数组到 2d【英文标题】:3d Numpy array to 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)或添加额外的维度和重塑(不确定这是否可行)?

谢谢,

【问题讨论】:

【参考方案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 输入,所以我猜想获得它并不容易。 :) 很高兴得到确认。 @unutbu:我也有类似的问题,***.com/questions/35302361/reshape-an-array-of-images 你可以看看吗?谢谢。

以上是关于3d Numpy 数组到 2d的主要内容,如果未能解决你的问题,请参考以下文章

3d Numpy 数组到 2d

有没有办法使用numpy从python中的2D数组构造3D数组?

基于 2D 数组的 3D numpy 切片的平均值

NumPy:在 3D 切片中使用来自 argmin 的 2D 索引数组

检查两个 3D numpy 数组是不是包含重叠的 2D 数组

2D 数组每列的外积形成 3D 数组 - NumPy