numpy基础之ndarray内存布局属性

1 numpy基础之ndarray内存布局属性

ndarray属性反映数组本身信息,通过访问属性访问或设置数组内部信息。

ndarray属性包括内存布局属性、数据类型属性、其他属性。

ndarray的内存布局属性如下:

NO 内存布局属性 描述
1 flags 关于数组内存布局的信息
2 shape 表示数组维度大小的元组
3 strides 遍历数组时每个维度步进的字节元组
4 ndim 数组维度,轴
5 data 指向数组数据开头的Python缓存区对象
6 size 数组的元素个数
7 itemsize 一个元素的长度(单位字节)
8 nbytes 数组元素的总字节数
9 base 如果内存来自其他对象,则为基础对象

1.1 flags

描述

ndarray.flags获取ndarray对象的内存信息,包括如下属性信息:

NO 属性 描述
1 C_CONTIGUOUS © 数据是在一个单一的C风格的连续段中
2 F_CONTIGUOUS (F) 数据是在一个单一的Fortran风格的连续段中
3 OWNDATA (O) 数组拥有它所使用的内存或从另一个对象中借用它
4 WRITEABLE (W) 数据区域可以被写入,将该值设置为 False,则数据为只读
5 ALIGNED (A) 数据和所有元素都适当地对齐到硬件上
6 UPDATEIFCOPY (U) 这个数组是其它数组的一个副本,当这个数组被释放时,原数组的内容将被更新

示例

>>> import numpy as np
>>> arr=np.array([1,2,3])
>>> arr
array([1, 2, 3])
# arr.flags 获取数组内存信息
>>> arr.flags
  C_CONTIGUOUS : True
  F_CONTIGUOUS : True
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False

# 通过字典形式访问内存信息
>>> arr.flags['C_CONTIGUOUS']
True
# 通过点号+小写属性名,访问内存信息
>>> arr.flags.c_contiguous
True  

1.2 ndim

描述

ndarray.ndim获取NumPy数组的维度数量或称为轴数量,称为秩(rank)。

在NumPy中每一个线性的数组称为一个维度(dimensions)或一个轴((axis)。

一维数组的每个元素都是单个数字或字符串,轴数为1,最外层1个[]。

二维数组的每个元素都是一个一维数组,轴数2,最外层2个[]。

三维数组的每个元素都是一个二维数组。轴数3,最谓词3个[]。

示例

>>> import numpy as np
# 一维数组,每个元素都是单个数字或单个字符串
>>> ar1=np.array([1,2,3])
# 二维数组,每个元素都是单个数字
>>> ar2=np.array([[1,2,3]])
# 三维数组,每个元素都是二维数组
>>> ar3=np.array([[[1,2,3]]])
>>> ar1
array([1, 2, 3])
>>> ar2
array([[1, 2, 3]])
>>> ar3
array([[[1, 2, 3]]])
# 一维数数组轴数为1,最外层1个[]
>>> ar1.ndim
1
# 二维数数组轴数为2,最外层2个[]
>>> ar2.ndim
2
# 三维数数组轴数为3,最外层3个[]
>>> ar3.ndim
3

1.3 shape

描述

ndarray.shape返回表示数组各轴大小的元组。

轴的大小表示相同维度的元素的个数。

示例

>>> import numpy as np
>>> ar1=np.array([1,2,3])
>>> ar2=np.array([[1,2,3],[5,6,7]])
>>> ar3=np.array([[[1,2,3],[5,6,7]]])
>>> ar1.shape
(3,)
>>> ar2.shape
(2, 3)
# shape 返回 每个轴的大小组成的元组
# 轴的大小表示相同维度的元素的个数
# 轴从外到内统计大小
# 最外层,三维数组有1个二维数组[[1,2,3],[5,6,7]],元素个数为1
# 次外层,二维数组有2个一维数组[1,2,3],[5,6,7],元素个数为2
# 最内层,一维数组有3个元素
>>> ar3.shape
(1, 2, 3)

1.4 size

描述

ndarray.size返回数组的元素总个数。

示例

>>> import numpy as np
>>> ar1=np.array([1,2,3])
>>> ar2=np.array([[1,2,3],[5,6,7]])
>>> ar3=np.array([[[1,2],[3,5]],[[6,7],[8,9]]])
# ndarray.size返回数组的元素总个数
>>> ar1.size
3
>>> ar2.size
6
>>> ar3.size
8

1.5 itemsize

描述

ndarray.itemsize返回一个元素的字节长度(大小)。

示例

>>> import numpy as np
>>> ar3=np.array([[[1,2],[3,5]],[[6,7],[8,9]]])
# itemsize 返回元素的字节长度
>>> ar3.itemsize
4
# dtype 返回元素类型,int32为4字节
>>> ar3.dtype
dtype('int32')

1.6 nbytes

描述

ndarray.nbytes返回数组元素的总字节长度(大小)。

通过nbytes/itemsize获取元素总个数。

示例

>>> import numpy as np
>>> ar3=np.array([[[1,2],[3,5]],[[6,7],[8,9]]])
# nbytes 返回数组元素的总字节长度
>>> ar3.nbytes
32
>>> ar3.itemsize
4
# 通过nbytes/itemsize获取元素总个数
>>> ar3.nbytes/ar3.itemsize
8.0
# 与 size 相同
>>> ar3.size
8

你可能感兴趣的:(python,numpy)