在學寫Tensorflow 代碼的時候,不管是在計算過程,還是調(diào)用NumPy庫,經(jīng)常出現(xiàn)axis軸計算問題,手敲代碼,但是不理解axis 的含義,換了一個程序,又看不懂了.為了便于理解讥耗,特此將自己的理解進行梳理.
在 NumPy中打厘,每一個線性的數(shù)組稱為是一個軸(axis)蚪缀,也就是維度(dimensions).簡單來說,就是看同方向括號的個數(shù),舉個例子
>>>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 數(shù)組.以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]],對應位置元素求和,結(jié)果的維度去掉第一個數(shù)值2, 即(4,2).
>>>a.sum( axis=1)
>>>a
array([[12, 16],
[44, 48]])
axis=1,計算單位是一維數(shù)組,[ 0, 1],[ 2, 3],[ 4, 5],[ 6, 7]的和[12, 16] 與[ 8, 9],[10, 11], [12, 13], [14, 15]的和[44,48],拼接的結(jié)果,維度是去掉第二個數(shù)值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]拼接的結(jié)果,維度是去掉第三個數(shù)值2, 即(2,4).
理解了軸如何取值,對于Numpy 的其他操作,mean ,concatenate,max等就是計算的問題啦.對于看著還有疑問的童鞋們,建議實踐實踐,就明白其中的道理了.