解 説

NumPy(ナムパイ)とはPythonの外部ライブラリです。これをインポートすることで配列や行列での計算で便利なメソッドを利用することができます。Deep Learningでもこれらのメソッドは使われます。今回はNumPyの使い方を学習します。
普通にリストなどを使用したら良さそうですが、複雑な行列の計算など計算スピードが早くなるような設計がされていたり、便利なメソッドも多いことがメリットです。

尚、ここでのサンプルの結果はJupyter Notebookに表示される結果です。

NumPyを使うにはライブラリ(モジュール)をimportする必要があります。

numpyのimport方法

numpyを読み込むにはimport文を使います。 その後の「as」は別名を付けるもので一般的に略称になるような名前を付けます。

numpyをimportすることで、NumPyの便利なメソッドを使うことができるようになります。

NumPy配列を作成

ベクトルとは向きと長さを表現したもので、速度などを表現する場合に使われます。
数学的には、2次元の場合、xとyで方向を示して、長さは で表します。
これはつまりxとyの値がわかればピタゴラスの定理を使って長さを求めることができるわけです。

ピタゴラスの定理は、左の図のような直角三角形の3つの辺の長さ(量)について

が成り立つというものです。

NumPy配列はnp.array() 関数で作成できます。型を調べると「numpy.ndarray」で示されます。

NumPy配列は数学の概念で言えば、1次元の場合はベクトル、2次元の場合は行列、3次元以上の場合はテンソルにあたります。

Jupyter Notebookで下記のサンプルを試してみましょう。
次のサンプルは通常のリストを作成して、それをNumPy配列を作成しています。
その後、type()で型を確認しています。

結果
[1 2 3 4 5]
numpy.ndarray

NumPy配列の演算

NumPy配列は計算を行えます。それぞれの要素に簡単に四則演算を行うことができます。
これは2次元のベクトルの足し算や定数倍を行なっています。
参考:線形代数の基礎 第2回 – ベクトル(1)

NumPy配列を作成

加算の例

結果
array([[ 2, 4, 6, 8],
[16, 18, 20, 22]])

減算の例

結果
array([[0, 0, 0, 0],
[0, 0, 0, 0]])

掛け算の例
スカラーを掛けた場合

結果
array([[ 2, 4, 6, 8],
[16, 18, 20, 22]])

配列同士を掛けた場合

結果
array([[ 1, 4, 9, 16],
[ 64, 81, 100, 121]])

行列の積

行列の積の計算は少し面倒です。公式は次のようになります。

この計算もnumpyを使うと簡単に行えます。
nampyでは、numpy.dot()を使って行列同士の積算を行うことができます。

行列の積算例

結果
array([[1, 1],
[7, 7]])

積算の順番を帰ると答えは違ってきます。

結果
array([[3, 5],
[3, 5]])

ベクトルと行列の積算例

結果
array([0, 3])

結果
array([1, 1])

行列A の列数と 行列B の行数が一致しないと積算ができません。
エラーがでる例

結果
—————————————————————————
ValueError Traceback (most recent call last)
in ()
—-> 1 np.dot(d,w)

ValueError: shapes (2,2) and (3,) not aligned: 2 (dim 1) != 3 (dim 0)

インデックスを使って要素を取り出す方法

この方法はリストの要素を取り出す方法と同じです。

結果
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
5

結果
array([1, 2, 3])

2次元配列の例

結果
array([[ 2, 4, 6],
[ 1, 3, 5],
[ 0, 10, 20]])
5

結果
array([[4, 6],
[3, 5]])

行と列の入れ替え

行と列を入れ替えるには「T」を使います。

結果
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])

Tを使って行と列を入れ替える例

結果
array([[0, 3, 6],
[1, 4, 7],
[2, 5, 8]])

transpose()を使っても上と同様の結果を得られます。

結果
array([[0, 3, 6],
[1, 4, 7],
[2, 5, 8]])

transpose()の引数は次のように使います。
arr.transpose((0,1))とすると行と列は入れ替わりません。
arr.transpose((1,0))とすると行と列が入れ替わります。

Matplotlibでグラフを描画

機械学習を行うにはグラフが有効に活用できます。
Matplotlibはグラフ描画のためのライブラリです。matplotlibをimportするだけで簡単にグラフ描画ができますので使い方を覚えましょう。
次の例はnumpyとmatplotlibのpyplotというモジュールを利用したものです。
arange()で-5から15まで0.1ステップで配列を作成して、yの値は 2 * x + 1で算出しています。
その結果をグラフ化したものです。

次のサンプルはxに配列を代入するまでは上と同じものです。
y_2を算出する計算式を2次関数に変更したものです。

次のサンプルはxに配列を代入するまでは上と同じものです。
y_3を算出する計算式を3次関数に変更したものです。

参考資料:python/numpy