在理解这两个函数之前,首先要理解numpy数组的轴
轴(axis)是数组中维的标志,用维来解释的话过于抽象了,我们可以通过一个实例来说明
假设我有一张学生成绩表,成绩表是按座位排列,成绩表如下
78 | 34 | 87 | 25 | 83 |
25 | 67 | 97 | 22 | 13 |
78 | 43 | 87 | 45 | 89 |
那么这张表的横轴就是就是排,竖轴就是列,我们可以算哪一排或者哪一列的平均分或者最高分,就是指定轴做运算,我们给把张表当成一个二维数组并加上数组下标,变成下表:[[78,34,87,25,83],[25,67,97,22,13],[78,43,87,45,89]]
78(00) | 34(01) | 87(02) | 25(03) | 83(04) |
25(10) | 67(11) | 97(12) | 22(13) | 13(14) |
78(20) | 43(21) | 87(22) | 45(23) | 89(24) |
import numpy as np
a = np.array([[78, 34, 87, 25, 83], [25, 67, 97, 22, 13], [78, 43, 87, 45, 89]])
print(a.max(axis=0))
print(a.max(axis=1))
打印
[78 67 97 45 89]
[87 97 89]
从这里可以看到axis=0就是竖轴的数据,第一行打印出了每列的最大值,axis=1就是横轴的
下面我们再使用一个2X2的三维数组:[[[0, 1], [2, 3]], [[4, 5], [6, 7]]]
0(000) | 1(001) |
2(010) | 3(011) |
4(100) | 5(101) |
6(110) | 7(111) |
import numpy as np
a = np.array([[[0, 1], [2, 3]], [[4, 5], [6, 7]]])
print(a.max(axis=0))
print('\n')
print(a.max(axis=1))
print('\n')
print(a.max(axis=2))
打印内容:
[[4 5]
[6 7]]
[[2 3]
[6 7]]
[[1 3]
[5 7]]
这里的最大值就是把一个一维数组当成了一个元素
当axis为0和1时,和二维数组同理
重点关注axis=2时,这时为了匹配数组第三个下标相同的为一组,一维数组中的内容发生了改变:
[0(000),2(010)] | [1(001),3(011)] |
[4(100),6(110)] | [5(101),7(111)] |
可以看出多维数组的axis是与数组下标相关的
现在再说rollaxis函数,这个函数有三个参数
numpy.rollaxis(arr, axis, start)
arr:输入数组
axis:要向后滚动的轴,其它轴的相对位置不会改变
start:默认为零,表示完整的滚动。会滚动到特定位置
运行代码:
import numpy as np
a = np.arange(8).reshape(2, 2, 2)
print '原数组:'
print a
print '\n'
# 将轴 2 滚动到轴 0(宽度到深度)
print '调用 rollaxis 函数:'
print np.rollaxis(a, 2)
# 将轴 0 滚动到轴 1:(宽度到高度)
print '\n'
print '调用 rollaxis 函数:'
print np.rollaxis(a, 2, 1)
打印:
原数组:
[[[0 1]
[2 3]]
[[4 5]
[6 7]]]
调用 rollaxis 函数:
[[[0 2]
[4 6]]
[[1 3]
[5 7]]]
调用 rollaxis 函数:
[[[0 2]
[1 3]]
[[4 6]
[5 7]]]
程序运行np.rollaxis(a, 2)时,讲轴2滚动到了轴0前面,其他轴相对2轴位置不变(start默认0),数组下标排序由0,1,2变成了1,2,0
这时数组按下标顺序重组,例如第一个数组中[0,1]下标为[000,001],其中0的下标变动不影响值,1位置的下标由001变成010,第一位的下标滚动到最后一位下标的后面,值由1(001)变成2(010):
0(000) -> 0(000) | 1(001) -> 2(010) |
2(010) -> 4(100) | 3(011) -> 6(110) |
4(100) -> 1(001) | 5(101) -> 3(011) |
6(110) -> 5(101) | 7(111) -> 7(111) |
可以得出轴的滚动就是下标的滚动,同理,运行np.rollaxis(a, 2, 1)时将下标0,1,2变为0,2,
numpy.swapaxes(arr, axis1, axis2)函数则是交换,将axis1和axis2进行互换