【読書メモ】Deep Learningを学ぶ〜NumPyの使い方〜Part 4
最初に
本記事は以下の本から得た知見を自分用のメモも兼ねてまとめた記事となります。ただし本の内容をそのまま書き写ししているわけではなく、ある程度自身で調べたものや感想が混じっています。ご了承ください。
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
今回はPythonで高度な計算を扱う際に便利な外部ライブラリ「NumPy」の使い方を見ていきます。ディープラーニングの実装においても、このNumPyの配列クラス(numpy.array)にあるメソッドを使用します。
NumPyのインポート
Pythonでは外部ライブラリをインポートする際に import と打ち込む必要があります。今回はNumPyをnpという名前でインポートするコマンドを打ち込みます。NumPyをインポートする際にはnpというエイリアスを付けるのが慣例のようです。
import numpy as np
NumPy配列
NumPyではN次元配列を作ることも簡単です。その場合はNumPyのnp.array()
というメソッドを使用し、(numpy.ndarray)
を作成します。配列の要素数が同じであれば、算術計算を行うことも可能です。
>>> array = np.array([2.0,4.0,6.0]) # 一次元配列(ベクトル) >>> print(array) [ 2. 4. 6.] >>> type(array) <type 'numpy.ndarray'> >>> array = np.array([1.0, 2.0 ,3.0]) # array上書き >>> array + array array([ 2., 4., 6.]) >>> array2 = np.array([3.0, 6.0, 9.0]) >>> array2 - array array([ 2., 4., 6.]) >>> array * array2 array([ 3., 12., 27.]) >>> array / array2 array([ 0.33333333, 0.33333333, 0.33333333]) >>> array / 2.0 # 配列と単一の数値で算術計算を行えるブロードキャストと呼ばれる機能 array([ 0.5, 1. , 1.5]) >>> dArray = np.array([[1, 3, 5], [0, 2, 4]]) # 二次元配列(行列) >>> print(dArray) [[1 3 5] [0 2 4]] >>> dArray.shape # 行列dArrayの形状 (2, 3) >>> dArray + dArray array([[ 2, 6, 10], [ 0, 4, 8]]) >>> dArray * dArray array([[ 1, 9, 25], [ 0, 4, 16]]) >>> dArray[1] # 1行目 array([0, 2, 4]) >>> dArray[1][1] # 1行目の1番目の要素 2 >>> for row in dArray: # for文を使った各要素へのアクセス ... print(row) ... [1 3 5] [0 2 4] >>> array = dArray.flatten() # 二次元配列のdArrayを一次元配列へ変換 >>> print(array) [1 3 5 0 2 4] >>> array > 3 # 各要素が3より大きいかどうか array([False, False, True, False, False, True], dtype=bool) >>> array[array>3] # 3より大きい要素を取り出し array([5, 4])
Pythonの処理速度
Pythonのような動的言語はC/C++と比べると処理が遅いと言われているようです。なので、Pythonでパフォーマンスが必要な場合には、処理の中身をC/C++で実装し、PythonでC/C++のプログラムを呼び出すようにします。NumPyに関しても主な機能はC++で実装されています。
最後に
NumPyの詳細な使い方は以下の記事が有用そうです。
また、NumPyに関しての本も出ているので、そちらも良さげ。
次はMatplotlibの説明となります。