在使用 NumPy 进行科学计算或数据分析时数组对象不仅存储数据本身还包含描述数组结构与内存布局的信息这些信息被称为数组属性array attributes。通过这些属性我们可以了解数组的维度结构、元素数量、数据类型以及内存占用情况从而更好地理解数组的内部结构与计算行为。NumPy 的数组属性主要通过 ndarray 对象的属性attributes提供访问接口。与函数不同这些属性通常不需要调用而是直接读取。按照功能划分NumPy 的数组属性通常可以分为六类1结构属性2类型属性3存储与内存属性4内存布局属性5结构变换相关属性6复数相关属性一、结构属性结构属性用于描述数组的维度结构与形状信息。shape返回数组在每个维度上的长度元组。ndarray.shape示例import numpy as np a np.array([[1,2,3], [4,5,6]]) print(a.shape)输出(2, 3)表明这是一个 2 行 3 列的矩阵。ndim返回数组的维度数整数。ndarray.ndim示例a np.array([[1,2,3], [4,5,6]]) print(a.ndim)输出2表明该数组是二维数组。size返回数组中包含的元素总数整数。ndarray.size示例a np.array([[1,2,3], [4,5,6]]) print(a.size)输出6说明size 等于 shape 各维度长度的乘积。NumPy 还提供了 np.size() 函数来获取元素总数np.size(a, axis1)该函数还可以按指定轴获得该轴的长度np.size(a,axis1)# 3二、类型属性类型属性用于描述数组中元素的数据类型。dtype返回数组元素的数据类型NumPy 的 dtype 对象。ndarray.dtype示例a np.array([1,2,3]) print(a.dtype)输出int64说明NumPy 使用统一的数据类型系统dtype不同于 Python 的动态对象类型。详情请参阅《NumPydtype 数据类型》itemsize返回每个元素所占的字节数整数。ndarray.itemsize示例a np.array([1,2,3], dtypenp.int32) print(a.itemsize)输出4表明 int32 类型占用 4 字节。三、存储与内存属性这些属性用于描述数组整体的存储规模。nbytes返回数组元素所占的总字节数整数。ndarray.nbytes示例a np.array([1,2,3,4], dtypenp.int32) print(a.nbytes)输出16说明nbytes size × itemsize。base返回数组的底层数据来源对象。ndarray.base如果数组是由切片或视图view创建的则 base 指向原数组。base 可作为判断数组是否与其他数组共享底层数据的重要线索但并不适合作为唯一判断依据。示例a np.array([1,2,3,4])b a[1:3] print(b.base)输出[1 2 3 4]说明b 并没有复制数据而是引用了 a 的数据缓冲区。如果数组拥有自己的数据则 base 为None。data返回指向数组底层数据缓冲区的 Python buffer 接口对象memoryview。ndarray.data示例a np.array([1,2,3]) print(a.data)输出示例memory at 0x...说明该属性用于访问底层内存缓冲区通常只在底层接口或 C 扩展开发时使用。四、内存布局属性NumPy 数组在内存中以字节序列的形式存储并通过 stride 机制描述各维度的访问步长。某些数组如切片或转置结果在内存中可能并不是连续存储。strides数组在各维度上的步长stride。返回一个元组表示在每个维度上移动一个索引单位时需要跨越的字节数。ndarray.strides示例a np.array([[1,2,3], [4,5,6]]) print(a.strides)示例输出(24, 8)这表明沿第 0 个维度行方向移动一个索引单位时需要跨越 24 字节沿第 1 个维度列方向移动一个索引单位时需要跨越 8 字节。对于 int64 类型每个元素占 8 字节每一行包含 3 个元素因此行方向的步长为 3 × 8 24 字节。关于 strides 的详细介绍请参阅《NumPy数组内存模型与 strides》flags返回数组的内存布局标志信息。ndarray.flags示例print(a.flags)示例输出C_CONTIGUOUS : TrueF_CONTIGUOUS : FalseOWNDATA : TrueWRITEABLE : TrueALIGNED : True常见标志含义C_CONTIGUOUS数组按 C 语言的行优先顺序连续存储。F_CONTIGUOUS数组按 Fortran 的列优先顺序存储。OWNDATA数组是否拥有自己的数据缓冲区。WRITEABLE数组是否允许修改。说明这些信息对于性能优化和底层计算库调用非常重要。flags 中还包含如 WRITEBACKIFCOPY 等较少直接使用的标志此处仅列出常见项。五、结构变换相关属性T返回数组的转置结果transpose在大多数情况下返回视图view但具体行为取决于数组的内存布局。ndarray.T示例a np.array([[1,2,3], [4,5,6]]) print(a.T)输出[[1 4] [2 5] [3 6]]说明对二维数组而言T 会交换行与列对一维数组而言T 不会改变结果。六、复数相关属性当数组元素为复数类型complex 时可以通过以下属性访问其实部与虚部。real返回数组元素的实部real part。ndarray.real示例a np.array([12j, 34j]) print(a.real)输出[1. 3.]说明返回数组元素的实部组成的浮点类型数组即使原数组为复数类型。imag返回数组元素的虚部imaginary part。ndarray.imag示例print(a.imag)输出[2. 4.]说明real 与 imag 通常返回原数组的视图不会复制数据。 小结NumPy 的 ndarray 通过一组属性描述数组的结构、类型、存储方式与内存布局。shape、ndim、size 用于理解数组形状dtype、itemsize 用于说明元素类型nbytes、base、data、strides、flags、T、real、imag 则进一步揭示其底层组织与访问方式。“点赞有美意赞赏是鼓励”