小白都能看懂的numpy與pandas中axis解釋

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]]]

這個多維數組的維度是2342*3*4,同樣我們來做一下求平均操作

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]]

具體分析過程與前面類似,就不再重複。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章