一文弄懂Numpy中ndarray的维度(dimension)/轴数(axis/axes)问题

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) 得到相同的结果。但是注意一维数组不能通过转置变为二维列向量。

一文弄懂Numpy中ndarray的维度(dimension)/轴数(axis/axes)问题_第1张图片
更具体的,一维数组、二维行向量与二维列向量的转换方式如下:

一文弄懂Numpy中ndarray的维度(dimension)/轴数(axis/axes)问题_第2张图片
其中,flatten()ravel()方法都是将数组展平为一维数组。两者之间的主要区别在于,ravel()生成的是对父数组的引用(即“视图”),这意味着对新数组的任何更改也会影响父数组,由于ravel不创建副本,因此内存效率高。flatten()则是创建了一个副本,对副本进行修改不会影响父数组。

在很多方法中,轴是作为参数出现的axis=0, 1, ...,如下:
一文弄懂Numpy中ndarray的维度(dimension)/轴数(axis/axes)问题_第3张图片
一文弄懂Numpy中ndarray的维度(dimension)/轴数(axis/axes)问题_第4张图片
一文弄懂Numpy中ndarray的维度(dimension)/轴数(axis/axes)问题_第5张图片

对于轴参数,我们应该理解为“将要被消除或折叠的维度或轴”,而不是将要返回的维度或轴。因此,axis=0意味着行将要被折叠,多行将会变成一行;axis=1意味着列将要被折叠,多列将会变成一列。

你可能感兴趣的:(机器学习与数据科学,python,numpy,ndarray,axis,axes)