NDArray 与 numpy.ndarray 互相转换及基础属性详解

Luna
Luna
发布时间:2026-10-15| 4人浏览过
原创

本文介绍 MXNet NDArray 与 NumPy ndarray 之间的相互转换方法,包括深复制和 asnumpy 操作。同时详细解析 NumPy 库的核心优势与局限,深入讲解 ndarray 对象的构成、秩与轴的概念,并列出 dtype、shape、size 等常用属性及 reshape、astype、sum 等关键方法,帮助开发者高效进行科学计算与数据预处理。

NDArray 与 numpy.ndarray 的相互转换

import numpy as np
from mxnet import nd
# numpy.ndarray 变 mx.NDArray
np_val = np.array([1, 2, 3])   # 定义一个numpy.ndarray
nd_val = nd.array(np_val)   # 深复制 
# NDArray 变 numpy.ndarray
np_val_ = nd_val.asnumpy()

NumPy 与 ndarray 简介

NumPy 概述

NumPy 全称为 Numeric Python,是一个开源的 Python 科学计算库,主要包含以下核心组件:

  • 一个功能强大的 N 维数组对象 ndarray;
  • 一套成熟的(广播)函数库;
  • 用于整合 C/C++ 和 Fortran 代码的工具包;
  • 实用的线性代数、傅里叶变换和随机数生成函数。

NumPy 的主要优点包括:

  • 执行相同的数值计算任务时,使用 NumPy 比直接编写 Python 代码要便捷得多;
  • NumPy 数组的存储效率和输入输出性能均显著优于 Python 中等价的基本数据结构,且其性能提升幅度与数组中的元素数量成正比;
  • NumPy 的大部分代码由 C 语言编写,其底层算法在设计之初便追求优异性能,这使得 NumPy 比纯 Python 代码高效得多。

当然,NumPy 也存在一些不足之处。由于 NumPy 使用内存映射文件以达到最优的数据读写性能,而内存大小的限制使其难以处理 TB 级的大文件;此外,NumPy 数组的通用性不及 Python 提供的 list 容器。因此,在科学计算之外的领域,NumPy 的优势便不那么明显。

数组 ndarray

NumPy 最重要的一个特点是其 N 维数组对象(即 ndarray),该对象是一个快速而灵活的大数据集容器,由两部分组成:

  • 实际的数据;
  • 描述这些数据的元数据。

大部分的数组操作仅仅是修改元数据部分,而不改变其底层的实际数据。数组的维数称为秩,简单来说就是如果你需要获取数组中一个特定元素所需的坐标数,如 a 是一个 2×3×4 的矩阵,你索引其中的一个元素必须给定三个坐标 a[x,y,z],故它的维数就是 3。而轴可以理解为一种对数组空间的分割,以数组 a 为例,如果我们以 0 为轴,那么 a 可以看成是一个由两个元素构成的数组,其中每个元素都是一个 3×4 的数组。

我们可以直接将数组看作一种新的数据类型,就像 list、tuple、dict 一样,但数组中所有元素的类型必须是一致的,Python 支持的数据类型有整型、浮点型以及复数型,但这些类型不足以满足科学计算的需求,因此 NumPy 中添加了许多其他的数据类型,如 bool、inti、int64、float32、complex64 等。同时,它也有许多其特有的属性和方法。

常用 ndarray 属性:

dtype 描述数组元素的类型

shape 以 tuple 表示的数组形状

ndim 数组的维度

size 数组中元素的个数

itemsize 数组中的元素在内存所占字节数

T 数组的转置

flat 返回一个数组的迭代器,对 flat 赋值将导致整个数组的元素被覆盖

real/imag 给出复数数组的实部/虚部

nbytes 数组占用的存储空间

常用 ndarray 方法:

  
reshape(…)返回一个给定shape的数组的副本
resize(…)返回给定shape的数组,原数组shape发生改变
flatten()/ravel()返回展平数组,原数组不改变
astype(dtype)返回指定元素类型的数组副本
fill()将数组元素全部设定为一个标量值
sum/Prod()计算所有数组元素的和/积
mean()/var()/std()返回数组元素的均值/方差/标准差
max()/min()/ptp()/median()返回数组元素的最大值/最小值/取值范围/中位数
argmax()/argmin()返回最大值/最小值的索引
sort()对数组进行排序,axis指定排序的轴;kind指定排序算法,默认是快速排序
view()/copy()view创造一个新的数组对象指向同一数据;copy是深复制
tolist()将数组完全转为列表,注意与直接使用list(array)的区别
compress()返回满足条件的元素构成的数组

以上为个人经验,希望能给大家一个参考,也希望大家多多支持本站。

相关标签:

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

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