如何理解numpy.rollaxis

发布于:2022-11-03 ⋅ 阅读:(639) ⋅ 点赞:(0)

import numpy as np

# 创建了三维的 ndarray

a = np.arange(8).reshape(2,2,2)

输出a为原数组:

[[[0 1] [2 3]]

 [[4 5] [6 7]]]

# 将轴 2 滚动到轴 0(宽度到深度)

#numpy.rollaxis(arr, axis, start),rollaxis的公式,参数说明如下:
  • #arr:数组
  • #axis:要向后滚动的轴,其它轴的相对位置不会改变
  • #start:默认为零,表示完整的滚动。会滚动到特定位置。

b = np.rollaxis(a,2,0)

输出b为调用 rollaxis 函数:

[[[0 2] [4 6]]

 [[1 3] [5 7]]]

为什么呢??????

三维数组array(轴0,轴1,轴2),将轴2滚动到轴0位置,其余轴顺序不变,即new_array(轴2,轴0,轴1)

分别写出各元素的在a和b中的位置坐标,如下图

a.array element b.array
[0,0,0] 0 [0,0,0]
[0,0,1] 1 [1,0,0]
[0,1,0] 2 [0,0,1]
[0,1,1] 3 [1,0,1]
[1,0,0] 4 [0,1,0]
[1,0,1] 5 [1,1,0]
[1,1,0] 6 [0,1,1]
[1,1,1] 7 [1,1,1]

shape=(2,2,2)的三维数组轴2滚动到轴0之后仍然是shape=(2,2,2),所以无论是a还是b数组,各个元素的位置坐标都是确定的且是一致的,所以本对应表全部写在一个表格便于对照,(如果轴滚动导致输出数组的形状变了,请另写出新表的各个元素的绝对位置来做对应),找到上表中的a、b值填到对应格子:

绝对位置 [0,0,0] [0,0,1]
a 0 1
b 0 2
   
绝对位置 [0,1,0] [0,1,1]
a 2 3
b 4 6
绝对位置 [1,0,0] [1,0,1]
a 4 5
b 1 3
   
绝对位置 [1,1,0] [1,1,1]
a 6 7
b 5 7

可以清晰得出,对于a数组,值排列为:

[[[0 1]
  [2 3]]

 [[4 5]
  [6 7]]]

对于b数组,值排列为:

[[[0 2]
  [1 3]]

 [[4 6]
  [5 7]]]

如果在a数组的基础上轴2挪到轴1,new_array.shape=(轴0,轴2,轴1)

# 将轴 2 滚动到轴 1:(宽度到高度)

c = np.rollaxis(a,2,1)

先将元素与数组的位置对应关系写清楚,如下图:

a.array element b.array c.array
[0,0,0] 0 [0,0,0] [0,0,0]
[0,0,1] 1 [1,0,0] [0,1,0]
[0,1,0] 2 [0,0,1] [0,0,1]
[0,1,1] 3 [1,0,1] [0,1,1]
[1,0,0] 4 [0,1,0] [1,0,0]
[1,0,1] 5 [1,1,0] [1,1,0]
[1,1,0] 6 [0,1,1] [1,0,1]
[1,1,1] 7 [1,1,1] [1,1,1]

再将元素一一对应放到新的数组位置中:

绝对位置 [0,0,0] [0,0,1]
a 0 1
b 0 2
c 0 2
     
绝对位置 [0,1,0] [0,1,1]
a 2 3
b 4 6
c 1 3
绝对位置 [1,0,0] [1,0,1]
a 4 5
b 1 3
c 4 6
     
绝对位置 [1,1,0] [1,1,1]
a 6 7
b 5 7
c 5 7

就可以得到c数组的元素排列为:

[[[0 2]

  [1 3]]

 [[4 6]

  [5 7]]]

---------------------------------------完----------------------------------------------

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到