Numpy操作中axis的理解
axis就是数组不同维度的表示,对于不同的axis进行运算,实际上就是沿着
为什么会有axis这个概念?
因为在numpy模块中,大多数处理的是矩阵或者多维数组。为了帮助实现对数组和矩阵的各种功能,就有了axis。表示数组和矩阵的各个维度。注意矩阵总是二维的。
实例讲解——在axis上的操作
下面首先使用Numpy生成一个三维数组:
# 生成矩阵
>>> import numpy as np
>>> np.arange(16).reshape(2,4,2)
>>> print(a)
[[[ 0 1]
[ 2 3]
[ 4 5]
[ 6 7]]
[[ 8 9]
[10 11]
[12 13]
[14 15]]]
使用np.shape()
函数就可以获取数组各维度的尺寸,已知a是一个三维数组,如下所示2,4,2就可以视为数组a在0,1,2三个维度上的大小。
>>> print(np.shape(a))
(2, 4, 2)
下面我们看下直接使用sum对数组各维度求和的结果:
>>> a.sum(axis=0)
array([[ 8, 10],
[12, 14],
[16, 18],
[20, 22]])
>>> a.sum(axis=1)
array([[12, 16],
[44, 48]])
>>> a.sum(axis=2)
array([[ 1, 5, 9, 13],
[17, 21, 25, 29]])
可以看出,在维度0上求和得到一个4*2的数组,在维度1上求和得到2*2的数组,在维度2上求和得到一个2*4的数组。可以发现,numpy对数组在不同的axis上进行运算,实际上是沿着该axis发生变化的方向进行操作的。
比如在axis = 0时,沿着维度0变化的方向进行运算,可以视为对维度(1, 2)进行切片,然后求和,求解过程如下所示:
>>> a[0,:,:]
array([[0, 1],
[2, 3],
[4, 5],
[6, 7]])
>>> a[1,:,:]
array([[ 8, 9],
[10, 11],
[12, 13],
[14, 15]])
>>> a[0,:,:]+a[1,:,:]
array([[ 8, 10],
[12, 14],
[16, 18],
[20, 22]])
在axis=1时,验证维度1变化的方向进行运算,可以视为对维度(0,2)进行切片,然后求和,求解过程如下所示:
>>> sum = np.zeros((2,2), dtype=np.int)
>>> print(sum)
[[0 0]
[0 0]]
>>> for i in range(4):
... print('第%d个切片如下所示' % (i))
... print(a[:, i, :])
... sum = sum + a[:, i, :]
...
第0个切片如下所示
[[0 1]
[8 9]]
第1个切片如下所示
[[ 2 3]
[10 11]]
第2个切片如下所示
[[ 4 5]
[12 13]]
第3个切片如下所示
[[ 6 7]
[14 15]]
>>> print(sum)
[[12 16]
[44 48]]
>>> a.sum(axis=1)
array([[12, 16],
[44, 48]])
同上面两个例子,大家也可以同样尝试下在第2个维度上的求和,以及其他求和、求均值以及求最大最小值。