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.

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

把特定的轴向后滚动,直到它到达指定的位置;
滚动后,其他轴与其他轴之间的相对位置不变。
知道这些后,我们可以自己来实验一下:

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]]]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
这时候我们就可以把这个三维数组中每个元素前后变换的“坐标”给它写下来:

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

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

————————————————
版权声明:本文为CSDN博主「任囧」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ren_jiong/article/details/104359165

你可能感兴趣的:(Numpy中numpy.rollaxis函数的理解)