由於對於這裏面當中的理論不是太懂,所以我會直接從一個例子入手。
1.Numpy中的軸
先以2維數組爲例
import numpy as np
#創建一個三維數組
data=np.arange(24).reshape(4,6)
print(data)
代碼輸出結果如下:
爲了方面展示,我們將2維數組的元素及其索引都通過下面的表格展示出來。具體如下:
0 [0,0] | 1 [0,1] | 2 [0,2] | 3 [0,3] | 4 [0,4] | 5 [0,5] |
6 [1,0] | 7 [1,1] | 8 [1,2] | 9 [1,3] | 10 [1,4] | 11 [1,5] |
12 [2,0] | 13 [2,1] | 14 [2,2] | 15 [2,3] | 16 [2,4] | 17 [2,5] |
18 [3,0] | 19 [3,1] | 20 [3,2] | 21 [3,3] | 22 [3,4] | 23 [3,5] |
下面我們將data中的shape和axis之間的關係:
- 上述代碼中的shape中的(4,6),其中4代表的是axis=0軸上的維度,而6對應的是axis=1軸上的維度。
下面我們來看看按軸求和之後的結果。
data_axis0=data.sum(axis=0)
data_axis1=data.sum(axis=1)
print(data_axis0)
print(data_axis1)
- 先來看按axis=0軸合併之後的結果(data_axis0)
36 | 40 | 44 | 48 | 52 | 56 |
下面來具體的看看以上的結果是如何計算出來的:(下面僅以36和40的計算過程爲例)
36=0[0,0]+6[1,0]+12[2,0]+18[3,0] ,可以發現,這些元素在axis=0上的索引不同,而在axis=1軸上的索引是相同的。
40=1 [0,1]+7[1,1]+13[2,1]+19[3,1], 可以發現,這些元素在axis=0軸上索引不同,但是在axis=1軸上的索引是相同的。
- 再來看按axis=1軸合併之後的結果(data_axis1)
15 | 51 | 87 | 123 |
15=0[0,0]+1[0,1]+2[0,2]+3[0,3]+4[0,4]+5[0,5] ,可以發現這些元素在axis=0軸上的索引相同,而在axis=1軸上的索引不同。
51=6[1,0]+7[1,1]+8[1,2]+9[1,3]+10[1,4]+11[1,5],可以發現這些元素在axis=0軸上的索引相同,而在axis=1軸上的索引不同。
綜上可以發現,numpy中按axis=i軸進行合併操作的時候,而相當於將所有其他軸上的索引相同的元素進行合併。
2.Pandas中的軸
import pandas as pd
import numpy as np
df=pd.DataFrame(np.arange(24).reshape(4,6),index=list('1234'),columns=list('ABCDEF'))
print(df)
df_axis0=df.sum(axis=0)
print(df_axis0)
df_axis1=df.sum(axis=1)
print(df_axis1)
代碼運行結果如下:
axis=0軸進行合併的結果:
axis=1軸進行合併的結果:
所以在pandas中axis=0實際上是映射到column上的,而axis=1映射到index上,僅就這兩個軸的反向,pandas與numpy是相反的。