Numpy 数组属性和方法
ndarray 对象预留了一些方法供我们调用,通过这些方法,我们可以查探到数组的一些基本信息,例如 dtype 可以查看数组的数据类型。本小节将介绍其他常用的方法,比如数组的大小、维数(秩)、元素的数据类型、每个元素的大小等等。
1. 数组的维数
1.1 ndim
数组的维数,即数组的秩,用来表征数组轴的数量或维度的数量。对于行向量:
arr_1 = np.array([1,2,3])
arr_1
Out:
array([1, 2, 3])
这是一个典型的一维数组,其秩记为 1,也就是说行向量只有一个轴(axis)。
对于二维数组:
arr_2 = np.array([[1,2,3],[4,5,6]])
arr_2
Out:
array([[1, 2, 3],
[4, 5, 6]])
可以把该二维数组视作是两个一维数组组成,其秩记为 2,也就是说二维数组有两个数据轴。
我们可以用下图来表征数组的数据轴:
在 Numpy 中数据轴记为 axis,其中 axis=0 记为最外层的轴。在二维数组中对应于列方向(即为上图的垂直方向)。
案例
通过 ndim 来查看一维数组的秩。
arr_1.ndim
Out:
1
通过ndim来查看二维数组的秩。
arr_2.ndim
Out:
2
2. 数组的维度
2.1 shape
数组的维度(n,m),即数组大小,对应于矩阵的 n 行 m 列。
通常通过 shape 来查询数组的维度,该方法返回一个元组,这个元组的长度就是维度的数目,即 ndim 属性(秩)。元祖的元素分别表征各个数据轴上的元素的个数。
案例
我们用 shape 来查看一维数组的维度。
arr_1.shape
Out:
(3,)
可以看到一维数组只有一个数据轴,该数据轴上包含 3 个元素。
我们用shape来查看二维数组的维度。
arr_2.shape
Out:
(2, 3)
可以看到,arr_2 是一个 2 行 3 列(2×3)的数组。
2.2 reshape
ndarray 提供了一个不改变数组元素内容、直接改变数组维度的方法:reshape。通过该方法,可以方便地对数组元素进行重排。
reshape 的函数调用方法如下:
ndarray.reshape(newshape, order="C")
构造函数接受的参数详解如下:
参数 | 描述 |
---|---|
newshape | 变更后的数组维度 |
order | 数据元素重排方式,有C、F、A可选。“C”指的是用类C写的读/索引顺序的元素,对二维数组,是优先读写行;“F”是指用FORTRAN类索引顺序读/写元素,对二维数组,是优先读写列。“A”表示排序方式跟随原数组。 |
案例
利用 reshape 方法生成一个维度为 4*5、优先读写行的二维数组。
np.array(range(20)).reshape((4,5), order="C")
这里用 range(20) 生成一个长度为20的有序序列,用 reshape 进行重排序,order 表示优先读写行。
Out:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
3. 数组元素的总个数
3.1 size
ndarray 提供了 size 方法,可以快速查看数组中元素的格式,该方法对应于 shape 方法中 n*m 的值。
案例
快速查看二维数组的元素格式:
arr_2.size
Out:
6
可以看到,arr_2 数组共含有 6 个元素。
4. 查看数组元素的大小
4.1 itemsize
该方法以字节的形式返回数组中每一个元素的大小。
例如:一个元素类型为 float64 的数组 itemsize 属性值为 8。因为 float64 占用 64 个 bits,每个字节长度为 8,所以 64/8,占用 8 个字节。
又如:一个元素类型为 complex32 的数组 item 属性为 4。因为 complex32 占用 32 个 bits,占用 4 个字节。
案例
先创建一个 dtype 为 int32 的数组,再查看其元素的大小。
x = np.array([1,2,3,4], dtype=np.int32)
x.itemsize
Out: 4
5. 小结
本节重点介绍了数组常用的属性(维数、维度、元素个数、元素大小),其中 shape 与 reshape 是最常用的两种方法。需要注意的是,reshape 方法和 range() 联用,可以快速创建维数较高的数组,较为常用。