【先声明:本文尽量用简单直观的方式解释说明,可能会有些许错误——欢迎指正交流】
- NumPy‘s array type augments the Python language with an efficient data structure useful for numerical work, e.g., manipulating matrices. NumPy also provides basic numerical routines, such as tools for finding eigenvectors.
Numpy作为Python基础科学计算库,可以很方便地用来处理多维数组的numerical work。里面包含了强大的多维数组类型:array(homogeneous)、各种可直接用于矩阵计算的函数(比如求矩阵的秩、求特征值特征向量、SVD分解等等)、用于集成C/C++或Fortran代码的工具,以及用于生成计算随机数、傅里叶变换、线性代数等等数据处理的tools。
经常用Numpy的猿应该都了解axis/axes对于array的重要性,许多对于多维数组的操作函数都涉及到这个参数,axis取值不同往往会计算出不同的结果,但axis的存在也让array的计算更加方便灵活,所以这篇文章的主要内容就是把我对于axis/axes的理解写出来,帮助大家更好地grasp这个概念,迎娶白富美走上人生巅峰(雾
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
首先,在Numpy中,维数(dimensions)通过轴(axes)来扩展,轴的个数被称作rank。这里的rank不是线性代数中的rank(秩),它指代的依旧是维数(number of dimensions):
The number of axes (dimensions) of the array. In the Python world, the number of dimensions is referred to as rank.
在数学或者物理的概念中,dimensions被认为是在空间中表示一个点所需要的最少坐标个数,但是在Numpy中,dimensions指代的是axes。也就是说,axes、dimensions、rank这几个概念是相通的。
下面举例子,比如我们在3-D空间中定义三个点,用array的形式表达:
>>> import numpy as np
>>> a = np.array([[1,2,3],[2,3,4],[3,4,9]])
>>> a
array([[1, 2, 3],
[2, 3, 4],
[3, 4, 9]])
按照以往的理解,我们可能会认为这个array是三维的,但实际上在Numpy中,这个array的dimensions,也就是rank的值是等于2的:
>>> np.ndim(a)
2
因为它只有两个axis,只不过这两个axis的长度(length)均为3:
>>> np.shape(a)
(3, 3)
同时,这个矩阵在线性代数中的rank(秩)依旧是3(这里要加以区分):