Numpy中numpy.rollaxis函数的理解

Numpy中numpy.rollaxis函数的理解

在学习Numpy的过程中卡在了这个古怪的函数好一阵子不明其意,研究一番后终于有一些醒悟,把理解贴出来以后备用。

要想理解这个函数首先要理解在Numpy中是如何输出一个多维数组的。Numpy在这里把维数说成“轴”,从0轴到n轴递增。其实这就跟直角坐标系中的xyz轴是一个道理,只不过它只有3个轴罢了。
我找到一张比较形象的图
现在看看numpy.rollaxis函数的官方解释:

numpy.rollaxis(a, axis,start=0)
Roll the specified axis backwards, until it lies in a given positions.
Parameters:
a [ndarray] Input array.
axis [int] The axis to roll backwards.The positions of the other axes donot change relative to one another.
start [int, optional] The axis is rolled until it lies before this position.The default,0, results in a “complete” roll.

其中有两个比较重要的点:

  1. 把特定的轴向后滚动,直到它到达指定的位置;
  2. 滚动后,其他轴与其他轴之间的相对位置不变。

知道这些后,我们可以自己来实验一下:

import numpy as np
# 创建了三维的 ndarray
a = np.arange(8).reshape(2, 2, 2)
print(a)
print('\n')

print('调用 rollaxis 函数:')
print(np.rollaxis(a, 2))
# 将轴2滚动到轴0
print('\n')
#打印结果:
原数组:
[[[0 1]
  [2 3]]

 [[4 5]
  [6 7]]]


调用 rollaxis 函数:
[[[0 2]
  [4 6]]

 [[1 3]
  [5 7]]]

这时候我们就可以把这个三维数组中每个元素前后变换的“坐标”给它写下来:

0(0,0,0)->(0,0,0)
1(0,0,1)->(1,0,0)
2(0,1,0)->(0,0,1)
3(0,1,1)->(1,0,1)
4(1,0,0)->(0,1,0)
5(1,0,1)->(1,1,0)
6(1,1,0)->(0,1,1)
7(1,1,1)->(1,1,1)

现在就可以很直观地看到官方文档里的解释是什么意思了:将指定的轴向左移动到指定的轴的位置(默认为轴0),同时其他的轴就都向前移动一格,保持未滚动的轴之间的相对位置不变。

图片来源于http://www.uml.org.cn/python/201811131.asp

发布了10 篇原创文章 · 获赞 5 · 访问量 3365

猜你喜欢

转载自blog.csdn.net/ren_jiong/article/details/104359165