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

如何将5个(4,3)形状的列表组合成(3,4,5)的NumPy三维数组

问题:将多个(3,4)数组组合为(3,4,5)三维数组

现有5个列表x1至x5,每个列表转换为NumPy数组后shape为(3,4)。需要将它们组合成shape为(3,4,5)的三维数组x,要求x[:,:,0]与x1相同、x[:,:,1]与x2相同,以此类推至x[:,:,4]与x5相同。

此前尝试代码:

x = np.array([x1, x2, x3, x4, x5]).reshape([3,4,5])

得到的结果不符合预期,现求正确实现方式。

列表定义

import numpy as np

x1 = [[1,11,111,111.1], [1111,11111,111111,111111.1], [0.1, 0.11, 0.111, 0.1111]]
x2 = [[2,22,222,222.2], [2222,22222,222222,222222.2], [0.2, 0.22, 0.222, 0.2222]]
x3 = [[3,33,333,333.3], [3333,33333,333333,333333.3], [0.3, 0.33, 0.333, 0.3333]]
x4 = [[4,44,444,444.4], [4444,44444,444444,444444.4], [0.4, 0.44, 0.444, 0.4444]]
x5 = [[5,55,555,555.5], [5555,55555,555555,555555.5], [0.5, 0.55, 0.555, 0.5555]]

预期与错误结果对比

  • 预期x[:,:,0]输出:
array([[1, 11, 111, 111.1],
 [1111, 11111, 111111, 111111.1],
 [0.1, 0.11, 0.111, 0.1111]])
  • 此前方法得到的x[:,:,0]输出:
array([[1.000000e+00, 1.111100e+04, 1.110000e-01, 2.222000e+02],
       [2.000000e-01, 3.300000e+01, 3.333330e+05, 3.333000e-01],
       [4.444000e+03, 4.400000e-01, 5.550000e+02, 5.555555e+05]])

正确实现方式

使用np.stack函数,指定axis=2在第三个维度上堆叠数组,这样能保证每个原始数组对应三维数组的一个切片:

# 先将列表转为NumPy数组,再堆叠
arr_list = [np.array(x) for x in [x1, x2, x3, x4, x5]]
x = np.stack(arr_list, axis=2)

# 验证形状
print(x.shape)  # 输出 (3, 4, 5)
# 验证第一个切片
print(x[:,:,0])

错误原因说明

  • np.array([x1, x2, x3, x4, x5])会生成一个shape为(5,3,4)的数组
  • 直接调用reshape([3,4,5])会按行优先顺序重新排列所有元素,完全打乱了原始数组的结构,因此得到的结果不符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 18:05:02