如何横向堆叠数组?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
相关产品推荐
相关产品推荐

