文章目录
- Python中的axis
- 如何理解axis
- axis的含义
- 笛卡尔坐标
- 多维数组的元素指定
- 多维数组指定轴
- axis的取值
- 例子
- 例一axis=0和axis=-3
- 例二axis=1和axis==-2
- 例三axis=2
- 结语
Python中的axis
在使用numpy库时,有许多地方会出现axis的踪影,如求最大最小值、排序等情况。最常见的可能要数下面几个
- numpy.max
- numpy.min
- numpy.max
- numpy.argsort
下文我们就以numpy.max为例来详细讲解axis
如何理解axis
axis的理解主要分两点:axis的含义、 axis的取值
axis的含义
笛卡尔坐标
从笛卡尔坐标开始,我们将能对axis有一个直观的认识。
上图中我们想要指定(2, 3)这个点的位置,首先指定第一条轴即x轴,然后指定第二条轴即y轴。
多维数组的元素指定
对于多维数组来说,我们指定元素的方式和笛卡尔坐标如出一辙——通过不断指定元素在每条轴上的位置,只不过在多维数组中,位置是有限离散的整数
多维数组指定轴
上一小节我们已经形象地将多维数组指定元素和笛卡尔坐标轴指定位置联系了起来,下面我们就来指定多维数组的轴。
对于矩阵
第0轴是沿着1–>3方向;
第1轴是沿着1–>2方向。
那指定轴是什么意思呢?
通俗的将,我们指定某个轴就是指定沿着这个方向将数据点塌缩为一个(塌缩只是为了形象化,排序等情况指定轴则不是如此),如对上面这个矩阵指定axis=0求max:
import numpy
x = numpy.array([[1, 2], [3, 4]])
print(numpy.max(x, axis=0))
其输出将会为
这十分容易理解:我们沿着1–>3的方向塌缩,则1和3里面取最大值显然就是3, 2和4取最大值为4.
axis的取值
看到这里你可能会问,我已经理解了axis是什么了,取值无非是有几维就有几个,有什么好说的?
事实上,由于python语言的一些特性,我们的取值将不限于0, 1, 2, 3这些,指定轴还可以为负数!
如果不能对应正负数,那将会造成很多困惑。我们还是以上一小节中的矩阵为例说明。
import numpy
x = numpy.array([[1, 2], [3, 4]])
print(numpy.max(x, axis=-2))
其输出将会为
为什么这里将轴指定为-2和0会得到相同的输出呢?这里和python中序列的索引有极大的关系。在python序列中,正索引是从0到length-1, 而负索引则是从-1到-length。
在我们的例子中,指定轴为-1即指定为1则为1–>2方向,而指定轴为-2即指定为0则为1–>3方向了。
例子
举一个三维数组的例子:
import numpy
x = numpy.array([[[1, 2], [3, 4]],
[[4, 3], [2, 1]]])
print(x)
在上面这个三维数组中,显然有三个轴,即三个axis。下面我们对三个轴都求最大值
例一axis=0和axis=-3
print(numpy.max(x, axis=0))
print(all(numpy.max(x, axis=0)==numpy.max(x, axis=-3)))
输出为
[[4, 3],
[3, 4]]
True
这里的第0轴可能需要仔细理解一下,并不是指定矩阵求某个矩阵的最大值,而是将两个矩阵的每个元素相对比。
例二axis=1和axis==-2
print(numpy.max(x, axis=1))
print(all(numpy.max(x, axis=1)==numpy.max(x, axis=-2)))
输出为
[[3, 4],
[4, 3]]
True
例三axis=2
print(numpy.max(x, axis=2))
print(all(numpy.max(x, axis=2)==numpy.max(x, axis=-1)))
输出为
[[2, 4],
[4, 2]]
True
结语
感谢阅读,愿你有个灿烂的前程。