在学写Tensorflow 代码的时候,不管是在计算过程,还是调用NumPy库,经常出现axis轴计算问题,手敲代码,但是不理解axis 的含义,换了一个程序,又看不懂了.为了便于理解,特此将自己的理解进行梳理.
在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions).简单来说,就是看同方向括号的个数,举个例子
>>>a=np.arange(16).reshape(2,4,2)
>>>a
array([[[ 0, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7]],
[[ 8, 9],
[10, 11],
[12, 13],
[14, 15]]]
a 一共有 3个轴(0,1,2).要指定对轴进行如 sum ,mean ,concatenate等操作,先要弄清楚指定轴之后a 的值.方法很简单,指定n轴,就是从左到右,去掉第n个括号后,剩下的n+1 数组.以sum 为例,进一步说明.
>>>a.sum(axis= 0)
>>>a
array([[ 8, 10],
[12, 14],
[16, 18],
[20, 22]])
axis= 0,计算单位是矩阵,[[ 0, 1],[ 2, 3], [ 4, 5],[ 6, 7]] , [[ 8, 9],[10, 11], [12, 13], [14, 15]],对应位置元素求和,结果的维度去掉第一个数值2, 即(4,2).
>>>a.sum( axis=1)
>>>a
array([[12, 16],
[44, 48]])
axis=1,计算单位是一维数组,[ 0, 1],[ 2, 3],[ 4, 5],[ 6, 7]的和[12, 16] 与[ 8, 9],[10, 11], [12, 13], [14, 15]的和[44,48],拼接的结果,维度是去掉第二个数值4, 即(2,2).
>>>a.sum(axis=2)
>>>a
array([[ 1, 5, 9, 13],
[17, 21, 25, 29]])
axis=2,计算的元素的单位是单个元素,0,1和1; 2,3和5; 4,5和9; 6,7和13, [1,5,9,13] 与8,9 和17; 10,11和21;12,13和25; 14,15和29, [17,21,25,29]拼接的结果,维度是去掉第三个数值2, 即(2,4).
理解了轴如何取值,对于Numpy 的其他操作,mean ,concatenate,max等就是计算的问题啦.对于看着还有疑问的童鞋们,建议实践实践,就明白其中的道理了.