理解numpy 的数组操作rollaxis swapaxes函数

numpy.rollaxis(a, axis, start=0) 向后滚动指定的轴,直到它位于给定位置。
参数:
a:ndarray
输入数组。
axis:int
轴向后滚动。其他轴的位置相对于彼此不改变。
start:int,可选
轴被滚动,直到它位于此位置之前。默认值为0,导致“完成”滚动。
返回:
res:ndarray
对于Numpy> = 1.10,始终返回a的视图。对于早期的Numpy版本,只有当轴的顺序改变时,才返回a的视图,否则返回输入数组。
# 创建了三维的 ndarray
import numpy as np
a = np.arange(8).reshape(2,2,2)
print '原数组:'print aprint np.rollaxis(a,2) 
print np.rollaxis(a,2,1)我们来先看结果,如下:
原数组:
[[[0 1]
[2 3]]
[[4 5]
 [6 7]]]
调用 np.rollaxis(a,2)函数结果:
[[[0 2]
 [4 6]]
 [[1 3]
 [5 7]]]
调用 np.rollaxis(a,2,1) 函数结果:
[[[0 2]
 [1 3]]
 [[4 6]
 [5 7]]]
如何理解呢,很简单,写出原数组的轴的索引:
000 001
010 011
100 101
110 111


调用 np.rollaxis(a,2)函数意思就是将2轴旋转至轴0的前面,轴序0,1,2变成1,2,0 操作等同于np.rollaxis(a,2,0)新的轴至原轴的索引可以表示为:
000 010 
100 110 
001 011
101 111


对应的值即为:


[[[0 2]
[4 6]]
[[1 3]
[5 7]]]


调用 np.rollaxis(a,2,1) 将轴2滚动到轴1之前(相当于轴1和2位置交换),函数结果:轴序0,1,2变更为0, 2, 1
[[[0 2]
[1 3]]
 [[4 6]
 [5 7]]]


000 010
001 011
100 110
101 111


依此类推:


>>> print(np.rollaxis(a,1))# 将第1轴移动到轴0前面(相当于轴0和1交换位置),轴序0,1,2变更为1, 0, 2,等同于np.(rollaxis(a,1,0)


[[[0 1]
  [4 5]]
 [[2 3]
 [6 7]]]


000 001
100 101
010 011
110 111


>>> print(np.rollaxis(a,0,1))# 将第0轴移动到轴1之前,相当于没动,轴序0,1,2依旧为 0,1,2
[[[0 1]
  [2 3]]
 [[4 5]
  [6 7]]]
>>> print(np.rollaxis(a,0,2)) # 将第0轴移动到轴2之前,轴序0,1,2变更为 1,0,2
[[[0 1]
  [4 5]]
 [[2 3]

  [6 7]]]

>>> print(np.rollaxis(a,0,1))# 将第0轴移动到轴1之前,相当于没动,轴序0,1,2依旧为 0,1,2

[[[0 1]
  [2 3]]
 [[4 5]
  [6 7]]]
>>> print(np.rollaxis(a,0,2))# 将第0轴移动到轴2之前,轴序0,1,2变更为 1,0,2
[[[0 1]
  [4 5]]
 [[2 3]
  [6 7]]]


000 001
100 101
010 011
110 111


>>> print(np.rollaxis(a,2,0))# 将轴2滚动到轴0之前面,轴序0,1,2变更变更为 1,2,0


[[[0 2]
  [4 6]]
 [[1 3]
  [5 7]]]


000 010
100 110
001 011
101 111




swapaxes函数相对就简单多了,轴顺序直接对调就是了。
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值