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

如何将形状为(30, 100, 28, 28)的4D NumPy数组拆分为3D NumPy数组列表

拆分4D NumPy数组为指定列表的方法

你可以用两种简单直观的方式实现这个需求,下面给你详细说明:

方法一:列表推导式(最直接高效)

你的4D数组第一个维度正好对应30个批次,直接遍历这个维度的每个索引,取出对应的切片即可。每个切片会自动保留剩下的三个维度,完美匹配你要的(100, 28, 28)形状:

import numpy as np

# 模拟你的4D数组(实际替换成你自己的数组即可)
your_4d_array = np.random.rand(30, 100, 28, 28)

# 执行拆分
batch_list = [your_4d_array[i] for i in range(your_4d_array.shape[0])]

验证结果:

print(len(batch_list))  # 输出30,符合列表长度要求
print(batch_list[0].shape)  # 输出(100, 28, 28),每个元素的形状正确

这种方法的优势在于:逻辑直观易懂,而且NumPy的切片默认是视图(不会额外复制数据),内存使用效率很高,只有当你后续修改切片内容时才会触发数据复制。

方法二:使用np.split内置函数

如果你更习惯用NumPy原生函数处理数组拆分,也可以用np.split,但需要注意拆分后每个子数组会多一个长度为1的维度,需要用squeeze压缩掉:

import numpy as np

your_4d_array = np.random.rand(30, 100, 28, 28)

# 沿着第0轴(批次轴)拆分成30份
split_arrays = np.split(your_4d_array, 30, axis=0)
# 去掉每个子数组多余的第0维度
batch_list = [arr.squeeze(axis=0) for arr in split_arrays]

运行后得到的结果和方法一完全一致,适合习惯用NumPy工具链的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 18:02:26