numpy 學習彙總14-多維陣列的軸sum(axis) ( 基礎學習 tcy)
numpy中多維陣列的軸sum(axis) 2018/11/21
前言:
什麼叫做軸呢,官方文件的說明不好理解,簡單說吧陣列有多少箇中括號就叫做幾軸,a.ndim一般不等a.shape[0]如 a=np.arange(80).reshape(20,2,2) a.ndim# 3 a.shape# (20, 2, 2)
本人在網上搜索很多,沒有見到很好的解釋,一般很難理解。仔細看測試程式你能夠理解軸的計算原理,見解有限,歡迎
各位大俠提供更好的解釋方法。
=====================================================================================
1.axis 運算總結
一元運算通過axis沿指定軸操作
1).a.ndim=2
axis=0相當於垂直方向各個元素;
axis=1相當於水平方向上處理各個元素;
2).a.ndim=3
axis=0結果:
rst[m][n]=a[0][m][n]+a[1][m][n] +a[2][m][n] i=l_a
axis=1結果:
rst[m][n]=a[m][0][n]+a[m][1][n] +a[m][2][n] +a[m][3][n] i=m_a
axis=2結果:
rst[m][n]=a[m][n][0]+a[m][n][1] +a[m][n][2] +a[m][n][3]+ a[m][n][4] i=n_a
====================================================================================
axis sum總結:(3軸)更多軸你可以做類似推理,比較複雜,在此就不寫測試程式碼。
a.shape=(l_a , m_a, n_a)
rst.shape=(m,n)
axis=0 (m_a, n_a);
axis=1 (l_a, n_a);
axis=2 (l_a, m_a)
====================================================================================
2運算詳解:
3.測試程式
def isum(a,axes=0):
i0,m0,n0=a.shape
if axes == 0:
rst = np.zeros((m0, n0))
elif axes == 1:
rst = np.zeros((i0, n0))
else:
rst = np.zeros((i0, m0))
for i in range(i0):
for m in range(m0):
for n in range(n0):
if axes==0:
rst[m][n] += a[i][m][n]
elif axes==1:
rst[i][n] += a[i][m][n]
else:
rst[i][m] += a[i][m][n]
return rst
isum(a)
Out[44]:
array([[ 60., 63., 66., 69., 72.],
[ 75., 78., 81., 84., 87.],
[ 90., 93., 96., 99., 102.],
[105., 108., 111., 114., 117.]])
isum(a,1)
Out[45]:
array([[ 30., 34., 38., 42., 46.],
[110., 114., 118., 122., 126.],
[190., 194., 198., 202., 206.]])
isum(a,2)
Out[46]:
array([[ 10., 35., 60., 85.],
[110., 135., 160., 185.],
[210., 235., 260., 285.]])