NumPy:ndarray 数组属性

在使用 NumPy 进行科学计算或数据分析时,数组对象不仅存储数据本身,还包含描述数组结构与内存布局的信息,这些信息被称为数组属性(array attributes)。

通过这些属性,我们可以了解数组的维度结构、元素数量、数据类型以及内存占用情况,从而更好地理解数组的内部结构与计算行为。

NumPy 的数组属性主要通过 ndarray 对象的属性(attributes)提供访问接口。与函数不同,这些属性通常不需要调用,而是直接读取。

例如:

go 复制代码
arr.shapearr.dtype

按照功能划分,NumPy 的数组属性通常可以分为四类:

(1)结构属性

(2)类型属性

(3)大小与内存属性

(4)底层布局属性

一、结构属性

结构属性用于描述数组的维度结构与形状信息。

shape

返回数组在每个维度上的长度(元组)。

go 复制代码
ndarray.shape

示例:

php 复制代码
import numpy as np
a = np.array([[1,2,3],              [4,5,6]])
print(a.shape)

输出:

go 复制代码
(2, 3)

表明这是一个 2 行 3 列的矩阵。

ndim

返回数组的维度数(整数)。

go 复制代码
ndarray.ndim

示例:

php 复制代码
a = np.array([[1,2,3],              [4,5,6]])
print(a.ndim)

输出:

go 复制代码
2

表明该数组是二维数组。

size

返回数组中包含的元素总数(整数)。

go 复制代码
ndarray.size

示例:

php 复制代码
a = np.array([[1,2,3],              [4,5,6]])
print(a.size)

输出:

go 复制代码
6

说明:元素数量 = 所有维度长度的乘积。

二、类型属性

类型属性用于描述数组中元素的数据类型。

dtype

返回数组元素的数据类型(NumPy 的 dtype 对象)。

go 复制代码
ndarray.dtype

示例:

apache 复制代码
a = np.array([1,2,3])
print(a.dtype)

输出:

go 复制代码
int64

说明:

NumPy 使用统一的数据类型系统(dtype),不同于 Python 的动态对象类型。

详情请参阅:

NumPy:dtype 数据类型

itemsize

返回每个元素所占的字节数(整数)。

go 复制代码
ndarray.itemsize

示例:

apache 复制代码
a = np.array([1,2,3], dtype=np.int32)
print(a.itemsize)

输出:

go 复制代码
4

表明 int32 类型占用 4 字节。

三、大小与内存属性

这些属性用于描述数组整体的存储规模。

nbytes

返回数组元素所占的总字节数(整数)。

go 复制代码
ndarray.nbytes

示例:

apache 复制代码
a = np.array([1,2,3,4], dtype=np.int32)
print(a.nbytes)

输出:

go 复制代码
16

说明:nbytes = size × itemsize。

四、底层布局属性

NumPy 数组在内存中以字节序列的形式存储,并通过 stride 机制描述各维度的访问步长。某些数组(如切片或转置结果)在内存中可能并不是连续存储。

以下属性用于描述数组在内存中的布局方式。

strides

数组在各维度上的步长(stride)。返回一个元组,表示在每个维度上移动一个索引单位时需要跨越的字节数。

go 复制代码
ndarray.strides

示例:

php 复制代码
a = np.array([[1,2,3],              [4,5,6]])
print(a.strides)

示例输出:

go 复制代码
(24, 8)

这表明:沿第 0 个维度(行方向)移动一个元素时,需要跨越 24 字节;沿第 1 个维度(列方向)移动一个元素时,需要跨越 8 字节。

T

返回数组的转置结果(transpose),通常返回一个视图而不是新的数据副本。

go 复制代码
ndarray.T

示例:

php 复制代码
a = np.array([[1,2,3],              [4,5,6]])
print(a.T)

输出:

css 复制代码
[[1 4] [2 5] [3 6]]

说明:转置操作交换数组的行与列。

五、数组属性综合示例

示例:

php 复制代码
import numpy as np
a = np.array([[10,20,30],              [40,50,60]], dtype=np.int32)
print("shape:", a.shape)print("ndim:", a.ndim)print("size:", a.size)print("dtype:", a.dtype)print("itemsize:", a.itemsize)print("nbytes:", a.nbytes)print("strides:", a.strides)

输出示例:

apache 复制代码
shape: (2, 3)ndim: 2size: 6dtype: int32itemsize: 4nbytes: 24strides: (12, 4)

📘 小结

NumPy 数组对象提供了一组属性,用于描述数组的结构、类型以及内存布局。结构属性(shape、ndim、size)用于描述数组维度;类型属性(dtype、itemsize)用于说明元素类型;大小属性(nbytes)用于表示内存占用;底层属性(strides、T)反映数组在内存中的布局与视图关系。理解这些属性,有助于更深入地掌握 NumPy 数组的内部结构与计算机制。

"点赞有美意,赞赏是鼓励"

相关推荐
Jia-Hui Su4 小时前
Python类型标准(Type Hints)详解
开发语言·python·numpy·pyqt·ipython·python3.11
@fai20 小时前
【Python多线程截图】当 Python 多线程遇上底层 C 库——一次由“串图”引发的线程安全深度思考
python·opencv·numpy
懒羊羊不懒@1 天前
NumPy库详细介绍
numpy
love530love4 天前
ComfyUI 报错解决记录:NumPy/SciPy 不兼容与 OpenCV 扩展模块缺失
人工智能·windows·python·opencv·numpy·scipy·layerstyle
程序媛一枚~5 天前
✨✨✨使用Python,OpenCV及图片拼接生成❤️LOVE❤️字样图,每张小图加随机颜色边框,大图加随机大小随机颜色边框
图像处理·python·opencv·numpy·图像拼接
阿拉丁的梦5 天前
Blender的AI模型delaunay三角化拓扑
numpy
cnnews6 天前
在AWS Lambda上部署 tokenizers
python·云计算·numpy·aws·lambda·onnxruntime·tokenizers
清水白石0081 个月前
NumPy 向量化实战指南:从原理到实践的性能革命
python·numpy
Web极客码1 个月前
CentOS 7 删除文件却不释放空间?从 inode、文件描述符到 VFS 的底层原理解析
python·centos·numpy