Python中如何实现NumPy数组的分块_使用array_split函数切割数据

浅杰酱_1680

浅杰酱_1680

2026-03-31

738人浏览

原创

array_split 更常用是因为它能处理数组长度不能被切分数整除的场景,而 split 会直接抛 valueerror;它“尽力均分”,前几块可能多1个元素,且对小数组切多块时返回实际可分块数,避免越界错误。

python中如何实现numpy数组的分块_使用array_split函数切割数据

array_split 为什么比 split 更常用

因为 array_split 能处理不能整除的切分场景,而 split 遇到数组长度不能被切分数整除时直接抛 ValueError: array split does not result in an equal division。实际数据常有奇数长度,比如 1003 行日志、77 条传感器采样,硬用 split 得先 pad 或 truncate,反而引入噪声。

实操建议:

  • array_split 是“尽力均分”:前几块可能多 1 个元素,其余块大小一致
  • 若需严格等长(如喂给固定 batch size 的模型),应主动检查返回列表中各子数组的 .shape[0],必要时截断或丢弃末尾不完整块
  • 对高维数组,默认按 axis=0 切(即切行),传 axis=1 可切列,但注意维度必须存在

切分后如何安全取第 n 块而不越界

常见错误是写 chunks[2] 却没确认 len(chunks) > 3,尤其当原数组很小(比如只有 5 个元素却想切 10 块)时,array_split 仍会返回 5 个单元素数组,索引 2 存在;但若切 20 块,就只返回 5 个,此时 chunks[2] 直接报 IndexError。

实操建议:

  • 永远先判断 len(chunks) > n 再取 chunks[n]
  • 更稳妥的做法是用 chunks[n] if n ,避免中断流程
  • 如果只是遍历所有块,直接用 for chunk in chunks:,不依赖索引

axis 参数填错导致形状诡异

误传 axis=2 到二维数组上,会触发 numpy.AxisError: axis 2 is out of bounds for array of dimension 2;更隐蔽的是传 axis=-1 本意切最后一维,但忘了原数组是 (100, 5) —— 此时 axis=-1 等价于 axis=1,切的是列而非行,结果变成 100 行 × 若干小列块,后续 reshape 或计算容易崩。

python-code-analyz
python-code-analyz

专业Python代码分析与优化,支持语法检查、安全扫描、性能评估、复杂度分析及重构后优化代码生成。

下载

实操建议:

  • 切前用 a.ndim 确认维度数,再决定 axis 合法值范围是 0 到 a.ndim-1
  • 对图像类数据(shape 为 (H, W, C)),想按图像张量切批,用 axis=0;想把每张图的通道拆开,才用 axis=2
  • 不确定时先打印 chunks[0].shape 看一眼,比查文档快

内存和性能:切完别立刻 stack 回去

有人切完做些简单统计,又用 np.vstack(chunks) 拼回去——这会触发一次完整拷贝,原数组若超百 MB,操作延迟明显。更糟的是,若切分后做了 chunk *= 2 这类原地修改,再 stack 就不是原数据了,而是已变的副本。

实操建议:

  • 除非真要生成新数组,否则尽量用视图操作:比如用 np.s_[] 切片替代 array_split,或直接用 itertools.islice 流式处理
  • 若必须切分且后续要合并,考虑用 np.concatenate(chunks, axis=0),它比 vstack / hstack 更底层、少一层封装开销
  • 对超大数组,优先用 Dask 或 memory-map(np.memmap)+ 手动偏移读取,避开全量切分

分块本身不难,难的是切完之后那几行代码怎么写——越早意识到块是独立数组、不是引用,就越少掉进共享内存或意外拷贝的坑里。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1671

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4164

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1669

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

24137

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2947

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2987

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1163

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

596

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2303

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程