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的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法使用numpy从python中的2D数组构造3D数组?
NumPy:在 3D 切片中使用来自 argmin 的 2D 索引数组