我有一个4D numpy数组。例如,我有两批3个二维矩阵,形状为(2,3,4,5)。在每批中,我想水平连接三个二维矩阵(在最后一个维度上)。
输出形状应为(2,4,5 * 3)形状。
一个较小的例子,用于复制形状(2,3,2,2):
a1, a2, a3, a4 = 2, 3, 2, 2
arr = np.arange(a1*a2*a3*a4).reshape((a1, a2, a3, a4))
[[[[ 0 1]
[ 2 3]]
[[ 4 5]
[ 6 7]]
[[ 8 9]
[10 11]]]
[[[12 13]
[14 15]]
[[16 17]
[18 19]]
[[20 21]
[22 23]]]]
字符串
它的第一行(如果检查最后一个维度)应该是:[0, 1, 4, 5, 8, 9]
先谢了。
3条答案
按热度按时间s4chpxco1#
虽然可以使用某种形式的
concatenate
,但transpose
通常适用于这类问题:字符串
没有最后的重塑,第一条“线”是
型
对于所有不同维度的例子
型
有时候,计算转置需要一些反复试验,但是这里你想保持第一维不变,最后一个也是,所以我们只需要交换中间的两个。
转置本身生成一个视图,但是最后一次整形必须生成一个副本,因为它重新排序了“散乱”的值。
smdnsysy2#
使用加倍的
np.hstack
(通过所有矩阵收集水平行)并返回到np.reshape
的等效形状:jrcvhitl3#
尽管使用了列表解析,但这并没有创建一个中间数组,而且与Roman的答案相比,这是一个更快的选择(至少在我使用不同大小和形状运行的实验中是这样):
字符串