You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何横向堆叠数组?NumPy三维数组指定变形需求求助

解决NumPy数组按对应行拼接的问题

你需要将三维数组中第一个维度下的两个二维数组按对应行合并,以下是两种高效的实现方式:

方法1:直接拼接(推荐)

利用np.concatenate或np.hstack实现按行对应拼接:

import numpy as np

a = np.array([[[1, 2, 3, 4],
               [5, 6, 7, 8],
               [9, 10, 11, 12],
               [13, 14, 15, 16]],
              [[17, 18, 19, 20], 
               [21, 22, 23, 24], 
               [25, 26, 27, 28], 
               [29, 30, 31, 32]]])

# 方式1:使用concatenate指定轴
result = np.concatenate([a[0], a[1]], axis=1)

# 方式2:使用hstack更简洁
result = np.hstack(a)

输出结果符合预期:

array([[ 1,  2,  3,  4, 17, 18, 19, 20],
       [ 5,  6,  7,  8, 21, 22, 23, 24],
       [ 9, 10, 11, 12, 25, 26, 27, 28],
       [13, 14, 15, 16, 29, 30, 31, 32]])

方法2:转置后重塑形状

通过调整轴顺序,再用reshape实现:

result = a.transpose(1, 0, 2).reshape(4, 8)

原理:transpose(1,0,2)将原数组的轴从(2,4,4)改为(4,2,4),此时每个第一维度的元素是两个对应行的子数组,reshape(4,8)会将这两个子数组合并为一行。

为什么直接reshape不行?

reshape是按照数组在内存中的行优先顺序(C-style)重新排列元素。原数组的内存存储顺序是:
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,...
直接reshape(4,8)会把前8个连续元素作为第一行,这和你需要的跨维度拼接逻辑不符,所以得不到目标结果。

内容的提问来源于stack exchange,提问作者Jun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 06:48:34