在使用numpy库时,有许多地方会出现axis的踪影,如求最大最小值、排序等情况。最常见的可能要数下面几个
下文我们就以numpy.max为例来详细讲解axis
axis的理解主要分两点:axis的含义、 axis的取值
从笛卡尔坐标开始,我们将能对axis有一个直观的认识。
上图中我们想要指定(2, 3)这个点的位置,首先指定第一条轴即x轴,然后指定第二条轴即y轴。
对于多维数组来说,我们指定元素的方式和笛卡尔坐标如出一辙——通过不断指定元素在每条轴上的位置,只不过在多维数组中,位置是有限离散的整数
上一小节我们已经形象地将多维数组指定元素和笛卡尔坐标轴指定位置联系了起来,下面我们就来指定多维数组的轴。
对于矩阵
[ 1 2 3 4 ] begin{bmatrix} 1&2\ 3&4 end{bmatrix} [1324]
第0轴是沿着1–>3方向;
第1轴是沿着1–>2方向。
那指定轴是什么意思呢?
通俗的将,我们指定某个轴就是指定沿着这个方向将数据点塌缩为一个(塌缩只是为了形象化,排序等情况指定轴则不是如此),如对上面这个矩阵指定axis=0求max:
import numpy
x = numpy.array([[1, 2], [3, 4]])
print(numpy.max(x, axis=0))
其输出将会为
[ 3 4 ] begin{bmatrix} 3&4 end{bmatrix} [34]
这十分容易理解:我们沿着1–>3的方向塌缩,则1和3里面取最大值显然就是3, 2和4取最大值为4.
看到这里你可能会问,我已经理解了axis是什么了,取值无非是有几维就有几个,有什么好说的?
事实上,由于python语言的一些特性,我们的取值将不限于0, 1, 2, 3这些,指定轴还可以为负数!
如果不能对应正负数,那将会造成很多困惑。我们还是以上一小节中的矩阵为例说明。
import numpy
x = numpy.array([[1, 2], [3, 4]])
print(numpy.max(x, axis=-2))
其输出将会为
[ 3 4 ] begin{bmatrix} 3&4 end{bmatrix} [34]
为什么这里将轴指定为-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。下面我们对三个轴都求最大值
print(numpy.max(x, axis=0))
print(all(numpy.max(x, axis=0)==numpy.max(x, axis=-3)))
输出为
[[4, 3],
[3, 4]]
True
这里的第0轴可能需要仔细理解一下,并不是指定矩阵求某个矩阵的最大值,而是将两个矩阵的每个元素相对比。
print(numpy.max(x, axis=1))
print(all(numpy.max(x, axis=1)==numpy.max(x, axis=-2)))
输出为
[[3, 4],
[4, 3]]
True
print(numpy.max(x, axis=2))
print(all(numpy.max(x, axis=2)==numpy.max(x, axis=-1)))
输出为
[[2, 4],
[4, 2]]
True
感谢阅读,愿你有个灿烂的前程。
本文发布于:2024-01-29 00:11:44,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170645830711311.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |