Numpy库的核心是ndarray,实际上就是N维数组(N-dimensional array),关于这个数据对象的详细介绍,参考官方文档最为合适。有一点要注意的是,ndarray的内置方法只有30多个,常用的如求平均值可以写a.mean()
,但是求中位数就不可以,只能写np.median(a)
。
言归正传,在Numpy中维度dimension被称为轴axis(复数为axes)。对于一维数组,如a = np.array([1, 2, 3])
,a.shape
等于(3, )。
根据广播机制的规则一,小维度数组的shape在最左边补1,所以一维数组会被隐式解释为二维行向量,当矩阵乘以行向量时,可以使用形状 (n, ) 或 (1, n) 得到相同的结果。但是注意一维数组不能通过转置变为二维列向量。
更具体的,一维数组、二维行向量与二维列向量的转换方式如下:
其中,flatten()
和ravel()
方法都是将数组展平为一维数组。两者之间的主要区别在于,ravel()
生成的是对父数组的引用(即“视图”),这意味着对新数组的任何更改也会影响父数组,由于ravel不创建副本,因此内存效率高。flatten()
则是创建了一个副本,对副本进行修改不会影响父数组。
在很多方法中,轴是作为参数出现的axis=0, 1, ...
,如下:
对于轴参数,我们应该理解为“将要被消除或折叠的维度或轴”,而不是将要返回的维度或轴。因此,axis=0
意味着行将要被折叠,多行将会变成一行;axis=1
意味着列将要被折叠,多列将会变成一列。