NumPy 中如何正确声明和处理空数组

拾光
拾光
发布时间:2026-10-13| 6人浏览过
原创

本文深入解析 NumPy 中“空数组”的概念误区,指出直接创建动态扩容数组的低效性。通过对比 C 语言数组机制与 Python 列表,阐明 NumPy 基于连续内存分配的原理。提供预分配固定大小数组及先使用列表再转换的正确实践方案,帮助开发者避免频繁内存重分配的开销。

NumPy 空数组的常见误区

在搜索相关教程时,许多内容仅展示如何创建指定形状的数组(如 np.zeros((5, 2))),这些资料往往直接翻译自国外帖子,却未充分解释其背后的含义。

这种只展示结果而不解释原理的做法,容易让读者感到困惑甚至失望,因为创建指定形状的数组并不等同于创建“空”数组。

NumPy 内存分配机制解析

实际上,NumPy 的底层机制并不支持真正意义上的动态“空”数组。简单来说,NumPy 会预先申请连续的内存空间;如果数组大小频繁变动,系统就需要不断申请新的内存块。如果你熟悉 C 语言中的指针概念,就能理解 NumPy 数组更接近于固定格式的 array 而非动态增长的 list。

即使不熟悉 C 语言,只需记住一点:NumPy 数组一旦需要改变大小,就会像搬家一样,将所有现有数据打包并迁移到新的内存区域。因此,最佳实践是在初始化时就确定好数组的大小。

这意味着你不能从“空”状态开始逐步堆叠数据,但可以通过赋值操作来填充数据。

正确的数组创建与转换策略

具体示例如下:


sum = np.zeros(shape=(2284,1200))
for i in range(2284):
  pic_lab = mini_lab[i,:,:]
  pic_flatten = np.reshape(pic_lab,(1,1200))
  sum[i] = pic_flatten

通常情况下,我们不会毫无依据地创建数组。如果确实不确定最终规模,建议先使用 Python 的 list 进行数据收集,最后再通过 np.array(list) 转换为 ndarray。

以上关于 NumPy 声明和处理数组的详解即为全部内容,希望能为大家提供参考,并欢迎大家继续支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。