Enjoy Engineer Life

C#,Unity,C++,UE4などの技術ブログや雑記を徒然なるままに書いていきます。

【読書メモ】Deep Learningを学ぶ〜NumPyを用いた行列の計算〜Part 10

最初に

本記事は以下の本から得た知見を自分用のメモも兼ねてまとめた記事となります。ただし本の内容をそのまま書き写ししているわけではなく、ある程度自身で調べたものや感想が混じっています。ご了承ください。

f:id:rossamu:20190103000547p:plain ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

また、本記事は株式会社よむネコのプロジェクトの業務内のお時間を頂いて蓄積した知見となります。
以下会社URLです。

http://www.yomune.co/ f:id:rossamu:20191023153505p:plain



今回はNumPyを用いた多次元配列に関する計算について学んでいきます。

多次元配列を計算する実装

1次元配列と次元数の取得

   import numpy as np
    one_d_array = np.array([0, 1, 2, 3])
    np.ndim(one_d_array) # 配列の次元数を取得
    # 出力 : 1


2次元配列(行列)と要素数の取得

   import numpy as np
    two_d_array = np.array([[0, 1], [2, 3], [4, 5]])
    print(two_d_array)
    # 出力
    #[[0 1]
    # [2 3]
    # [4 5]]

    np.ndim(two_d_array)
    # 出力
    # 2
    
    two_d_array.shape # 各次元の要素数の取得
    # 出力
    #(3, 2)
    
    two_d_array.shape[0] # 指定した次元の配列が持つ要素数
    # 出力
    # 3


2次元配列は行列(matrix)と呼ばれています。配列の横方向の並びを行(row)、縦方向の並びを列(column)と呼びます。Excelなどをよく使う人なら馴染みがあるかと思います。


\begin{pmatrix}0 & 1 \\2 & 3 \\4 & 5 \\\end{pmatrix}



行列の内積(ドット積)

行列の実際の内積を計算する方法は以下のスライドがとても参考になると思います。

プログラマのための線形代数再入門


予め、注意点として挙げておくと、1つ目の行列の1次元目と、2つ目の行列の0次元目の数は一致させる必要があります。


   x1 = np.array([[1, 2, 3], [4, 5, 6]]) # 0次元目:2、1次元目:3
    x2 = np.array([[1, 2], [3, 4], [5, 6]]) # 0次元目:3、2次元目2
    y = np.dot(x1, x2) # 行列の積(ドット積)
    print(y)
    # 出力
    # array([[22, 28],
    #      [49, 64]])
    
    y.shape
    # 出力
    # (2, 2)
    



最後に

今回はNumPyでの行列計算方法についてでした。次回からは今回得た知識を用いて実際にニューラルネットワーク内積を実装していくこととなります。多分次回の記事は長くなりますが、お付き合い頂けると嬉しいです。