3.1.2-NumPy数组属性.md

3.1.2 NumPy数组属性

NumPy数组(ndarray)是进行科学计算时最基本的数据结构。它不但保存数值本身,还带有一组用来描述数组结构的常用属性。课程表3-1给出的常用属性包括:ndim(数组的维数)、size(数组中元素的总个数)、shape(由各维长度组成的元组)、dtype(数组元素的数据类型)以及T(数组的转置)。先读懂这些属性,再去做索引、切片、广播和函数运算,才不容易把轴方向弄错。

查看属性时,在数组对象后面直接写属性名即可,不必加括号。典型写法是先创建再观察:

import numpy as np
a = np.arange(8).reshape(2, 4)
print(a.ndim)
print(a.size)
print(a.shape)
print(a.T)

执行后得到2行4列的二维数组:a.ndim为2,说明有两条轴;a.size为8,等于各维长度的乘积;a.shape为(2, 4)。a.dtype表示元素类型,课程示例输出为dtype('int32');如果创建时不指定dtype,将由系统自动确定。二维数组的转置a.T会交换轴0与轴1,形状变为(4, 2),元素按列重新排列,结果为array([[0, 4], [1, 5], [2, 6], [3, 7]])。

要把属性与“数组的轴”对应起来。一维数组只有一条轴,称为轴0,沿着数组的长度方向操作;二维数组有轴0和轴1,轴0沿着行的方向,轴1沿着列的方向。ndim等于轴的条数,shape元组从左到右依次对应各轴长度。reshape()可以改变shape和ndim,但不能改变size,因为元素总数必须保持不变。若reshape时某一维写成-1,NumPy会按元素总数自动推断该维长度。

使用中有三个易错点。第一,一维数组的转置还是一维数组:对np.arange(4)取.T,结果仍是array([0, 1, 2, 3]),形状不会变成(4, 1)或(1, 4)。第二,dtype描述的是元素的数据类型,不是数组对象本身的类型;创建时可用dtype参数指定。第三,shape的结果是元组而不是列表,应写成(2, 4)而不是[2, 4]。另外,切片得到的视图与原数组共享数据,但它们仍是独立对象,各自拥有自己的维数、形状和大小等属性。

关键要点

下载此文件