在使用 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 的动态对象类型。
详情请参阅:
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 数组的内部结构与计算机制。

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