深入理解 NumPy ndarray:结构、创建与索引操作详解

阿橙
阿橙
发布时间:2026-10-13| 4人浏览过
原创

本文深入解析NumPy核心对象ndarray,涵盖其内存连续存储特性、单一数据类型约束及预编译C语言带来的性能优势。详细讲解ndarray的创建方法(如np.array、linspace、arange等)及一维至三维数组的维度与轴(axis)概念。通过具体代码示例,演示如何从高维到低维进行多维索引操作,帮助开发者直观理解数组排布与索引原理,为后续切片和过滤操作奠定基础。

NumPy ndarray基础与性能优势

NumPy作为Python科学计算领域的基石模块,为pandas、matplotlib等上层库提供了底层支撑。其中,ndarray作为NumPy的核心数据结构,是必须深入研究和理解的关键对象。

ndarray是一种存储单一数据类型的多维数组结构,其在内存中连续分布,并通过行索引和列索引来标记数组中的每一个元素。得益于预编译的C语言代码实现,ndarray在性能表现上具有显著优势。

1、ndarray的数据结构

ndarray的创建方法

2、ndarray的创建

NumPy提供了多种创建数组的方式。此外,其他处理过程也可能生成数组,例如使用cv2.imread读取图片时,返回的即为数组形式。

常用创建函数详解


np.array() # 传入类数组数据结构,list,tuple等,或者其他嵌套序列。返回的维度依据传入的数据而定
np.linspace() # 根据给定的间距生成等差序列,指定元素数量,返回一维数组
np.arange()# 根据给定的间距生成等差序列,指定步长。返回一维数组
np.ones() # 根据传入的shape,返回一个元素全是1的数组
np.zeros() # 根据传入的shape,返回一个元素全是0的数组
np.full() # 根据传入的shape和value,返回一个元素全是value的数组,比前面两个灵活
np.empty() # 根据传入的shape,返回一个元素全是随机化而不是空值的数组
np.genfromtxt() # 从文本文件读取生成一个数组

多维数组的维度与轴概念

3、ndarray的抽象理解

首先创建三个数组,分别为一维、二维和三维数组。

一维至三维数组示例


arr1 = np.arange(3)
arr1
array([0, 1, 2])
---------------------------------------------------------
arr2 = np.arange(9).reshape(3,3)
arr2
array([[0, 1, 2],
    [3, 4, 5],
    [6, 7, 8]])
----------------------------------------------------------
arr3 = np.arange(27).reshape(3,3,3)
arr3
array([[[ 0, 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]]])

Python中的arr结构如上述所示,我们将其形象化表示出来,如下图所示。

一维数组仅包含一个维度,也称为rank,只有一个axis轴,即axis=0。 二维数组包含两个维度,拥有两个axis轴,分别为axis=0和axis=1。 三维数组包含三个维度,拥有三个axis轴,分别为axis=0、axis=1和axis=2。

多维索引操作与原理

我们直接在三维数组上执行索引操作,以此理解ndarray的排布逻辑。

索引代码实战


arr3[1,2,1]
输出16

索引[1,2,1]的顺序是从高维到低维,依次对应axis轴从2到1再到0。其中,1代表三维上的第2个元素(即上图中间的数组,为一个二维数组);2代表二维上的第3个元素(为一个一维数组);1代表一维上的第2个元素。也可以尝试从轴的方向去理解索引的原理。 建议自行操作下方的索引代码,查看输出结果。


arr3[3,3,2]

不同维度的ndarray shape理解如下。可以通俗地将其理解为从点扩展到面,再到块的过程。

ndarray后续操作简介

4、ndarray的操作

主要涉及索引、切片、过滤等操作,后续将详细探讨。只要理解了ndarray的本质,相关操作其实非常简单。

Refer: [1] https://danzhuibing.github.io/py_numpy_ndarray.html [2] https://www.geeksforgeeks.org/numpy-ndarray/

到此这篇关于Numpy 理解ndarray对象的示例代码的文章就介绍到这了,更多相关Numpy ndarray对象内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

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

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 算法库。