1. 程式人生 > >numpy 學習彙總14-多維陣列的軸sum(axis) ( 基礎學習 tcy)

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