numpy.rollaxis函数解析


大家好,我是公来福,有问题烦请大家email我,共同探讨,我的email是gongqianyun_nk@163.com

numpy轴(axis)、秩(rank)的概念

在研究rollaxis函数之前,我们需要知道numpy中关于轴的概念。

秩(rank):numpy中数组的维数称为秩,一维数组的秩为1,二维数组的秩为2,以此类推。
轴(axis):一直没想到怎样更好地描述轴的概念,参考了https://blog.csdn.net/ddwoys/article/details/80731977这篇博客中关于轴的介绍,简要介绍一下轴的概念。

我认为,numpy中的轴可以想象成平面坐标系中的轴,每个点在x轴和y轴上均有一个值,只有x轴和y轴上的值同时确定才能确定这个点的位置。同样的,在numpy中,只有每个轴上的值都确定了,才能确定究竟是数组中的哪一个元素。一个萝卜一个坑,只有轴上的值都确定了,我们才能知道这个萝卜到底要放到哪个坑里。

ok,下面以一个2*2*3的array为例,可以表示成下面这个样子,怎么样,是不是一目了然,真得不得不说将轴想成树的想法太赞了
在这里插入图片描述

numpy.rollaxis解析

官方给出的解释是这样的:
rollaxis(a, axis, start=0)
向后滚动指定的轴,知道它位于给定的位置
参数含义:
a:输入数组
axis:int型,向后滚动的轴,其他轴的位置没有相对于彼此改变
start:int型,可选,滚动轴直到它位于此位置之前

不多说,上代码:

import numpy as np
a = np.ones((3,4,5,6))
print(a.shape)
print(np.rollaxis(a,3,1).shape)
print(np.rollaxis(a,2).shape)
print(np.rollaxis(a,1,4).shape)

打印结果如下:

(3, 4, 5, 6)
(3, 6, 4, 5)
(5, 3, 4, 6)
(3, 5, 6, 4)

列表来表示一下吧,第一行表示轴,第二行表示对应的轴里有几个元素。

初始:

axis0123
shape3456

执行代码

np.rollaxis(a,3,1)

对照参数定义可以看出是将3轴放在1轴前面,其他轴相对位置保持不变,所以变化后的轴的位置如下表:

axis0312
shape3645

之后,执行代码

np.rollaxis(a,2)

start参数默认为0,所以是将2轴放在0轴前面,其他轴相对位置保持不变,所以变化后轴的位置如下表:

axis2013
shape5346

同理,代码

np.rollaxis(a, 1, 4)

执行后是将1轴放在最后面,执行后轴的位置如下表:

axis0231
shape3564

现在应该大体了解所谓的轴的滚动是什么意思了,那么轴滚动后里面元素的位置又会发生怎样的变化呢?

import numpy as np
a = np.arange(12).reshape(2,2,3)
print(a)
print(">>>>>>>>>>>>>>>")
print(np.rollaxis(a,2))

打印结果:

[[[ 0 1 2]
[ 3 4 5]]
[[ 6 7 8]
[ 9 10 11]]]

[[[ 0 3]
[ 6 9]]
[[ 1 4]
[ 7 10]]
[[ 2 5]
[ 8 11]]]

为什么会发生这样的情况,我觉得可以这样理解:
我们取一个三位数xyz,其中x表示0轴取值,y表示1轴取值,z表示2轴取值
原先数组可以表示成以下形式:

0(000)1(001)2(002)
3(010)4(011)5(012)
6(100)7(101)8(102)
9(110)10(111)11(112)

执行代码后,轴的顺序变为2、0、1,也就是按照zxy的数字由小到大的顺序排列,即
0,3,6,9,1,4,7,10,2,5,8,11

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值