numpy中rollaxis()的理解
最近接触到这个函数,发现在网上的博客说的并不是很明白,有的说的有点过于复杂了(也可能是自己水平太low),下面是自己对于这个函数的理解
rollaxis(a, axis, start = 0)
这个函数的用处是翻滚数组的轴axis,对于轴的理解我们可以借助3纬的空间坐标系,我们都知道,空间直角坐标系的维度是3维,相对应的就有3个轴,按照一般的顺序,依次是x, y, z满足右手螺旋法则,而通过调用rollaxis函数我们改变x, y, z轴的顺序,从3维延伸到高维,也是一样的原理。
参数:
a —— 输入的数组
axis —— 需要移动的轴(按照其文档应该是往后翻滚的轴,但是我通过一些程序测试发现这样理解更容易)
start —— axis翻滚到这个轴的前面(注意是前面),其他轴的相对位置不变
注意:假设给出一个5维数组,那么它的轴编码依次是0,1,2,3,4 而start的取值范围是0,1,2,3,4,5
下面我们通过程序直观了解一下
>>> a = np.ones((3,4,5,6)) >>> np.rollaxis(a, 3, 1).shape (3, 6, 4, 5) >>> np.rollaxis(a, 2).shape (5, 3, 4, 6) >>> np.rollaxis(a, 1, 4).shape (3, 5, 6, 4)
接下来我们需要证实一下,某一轴翻滚之后,某一值得索引会有什么变化
如下图:
import numpy as np #生成4维随机数组 b = np.random.randn(3,4,5,6) #随意获取数组中一个值 >>> b[2,3,4,5] -1.8748822368949825 #将轴3移到轴1的前面 c=np.rollaxis(b, 3, 1) #查找值-1.8748822368949825在c中的索引 -1.8748822368949825 >>> np.where(c==-1.8748822368949825) #输出索引是c[2,5,3,4] (array([2], dtype=int64), array([5], dtype=int64), array([3], dtype=int64), array([4], dtype=int64))
通过运行程序我们发现值的索引的变化和轴的变化是一致的
至于理解,我们可以借助3维的空间直角坐标系,假设我们取x=1, y=2, z=3,其所代表的含义是这三个面相交于一点,假设这个点的值是5,,然后我们将z轴移到y轴的前面,可以肯定的是空间已经改变了,也就是说原来值为5的那个点的位置已经没有意义了,但是他还是x=1, y=2, z=3三个面的交点,我们在找这个点时,只是在新的空间里三个轴的位置改变了,而每个轴的取值并没有改变。