1.axis參數
在numpy與pandas,以及各種涉及到數值計算的類庫中,都會有axis這個參數。這個參數非常重要,初學者理解起來比較困難,如果按二維矩陣中行列的概念去理解會比較難理解。今天咱們用另外一種角度去理解axis參數,比較清晰更容易理解。
2.二維的情況
先看一個例子
data = pd.DataFrame([[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]], columns=['c1', 'c2', 'c3', 'c4'], dtype=int)
這個dataframe爲
c1 c2 c3 c4
0 1 1 1 1
1 2 2 2 2
2 3 3 3 3
print data.mean(axis=0)
沿着axis=0的方向求平均值,最終的結果是
c1 2.0
c2 2.0
c3 2.0
c4 2.0
如果沿着axis=1的方向球平均值,最終結果爲
0 1.0
1 2.0
2 3.0
原始數組的維度爲3*4。axis=0,相當於是拿掉外層的括號,消滅了"行"的維度,然後對第一列,第二列,第三列,第四列各自求平均。最後求平均值的結果就是消滅了最外層的維度,也就是3這個維度,剩下的結果是一個4維的向量。
同理,如果 axis=1,相當於拿掉的是裏層的括號,消滅了"列"的維度,然後對每一行各自求平均。最後的結果就是消滅了裏層的維度,也就是4這個維度,剩下的結果是一個3維的向量。
print data.drop('c4', axis=1)
上面drop的邏輯,同理是沿着內層的括號進行操作。最終是內層的維度被drop掉了一列,得到一個3*3的矩陣,結果如下
c1 c2 c3
0 1 1 1
1 2 2 2
2 3 3 3
3.多維情況
再看一個多維的情況
data = np.arange(24).reshape(2, 3, 4)
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
這個多維數組的維度是,同樣我們來做一下求平均操作
print data.mean(axis=0)
按照上面的理解, axis=0是最外層的括號。最終得到的結果維度爲3*4。
[[ 6. 7. 8. 9.]
[10. 11. 12. 13.]
[14. 15. 16. 17.]]
具體的計算邏輯爲:我們要消滅的維度爲2,所以參與計算的元素是兩個,比如6這個值,是0與12求平均的結果,結果矩陣b中b[0][0]是a[0][0][0]與a[1][0][0]求平均的結果!
print data.mean(axis=1)
要消滅的維度爲3,參與計算的元素是3個,最後的結果是2*4。
[[ 4. 5. 6. 7.]
[16. 17. 18. 19.]]
結果矩陣b[0][0]是a[0][0][0]+a[0][1][0]+a[0][2][0]平均的結果
print data.mean(axis=2)
結果如下
[[ 1.5 5.5 9.5]
[13.5 17.5 21.5]]
具體分析過程與前面類似,就不再重複。