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三个面的交点,我们在找这个点时,只是在新的空间里三个轴的位置改变了,而每个轴的取值并没有改变。

  

猜你喜欢

转载自www.cnblogs.com/yqs-0705/p/10174586.html
今日推荐