NumPyに関する世界観です。PythonでAI入門や人工知能・AI・機械学習・データマイニングも参照のこと。
NumPyは多次元の配列(1次元、2次元、3次元、…)を扱うことのできる便利なライブラリ。
「ゼロから作る」と表題にある書籍「ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装」でも、例外的にNumPyとMatplotlibだけはライブラリを使用します。
NumPyはディープラーニングの実装には不可欠であると言えるでしょう。
(ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装を参考に執筆しました。)
まず、NumPyをインポートする。
import numpy as np
これで、np.array()のように、NumPyのメソッドを使うことができる。
NumPyでは、要素数の一致に応じて、配列に賢く演算をかけることができる。
要素数が一致する配列と配列の計算は、要素ごとに演算が行われる。たとえば、
array1 = np.array([[1, 2, 3], [4, 5, 6]]) array2 = np.array([[10, 20, 30], [40, 50, 60]]) array1 + array2
とすれば、
array([[11, 22, 33], [44, 55, 66]])
という結果が返る。
これに対して、要素数が違う場合は、ブロードキャストという機能により、形状を自動的に調整して計算が行われる。
たとえば、複数の要素にひとつのスカラー値を与えた場合、すべての要素に対してスカラー値が与えられて計算される。
たとえば、
array3 = np.array([[1, 2, 3], [4, 5, 6]]) array3 * 10
とすれば、
array([[10, 20, 30], [40, 50, 60]])
という結果が返る。
スカラー値だけではなく、より複雑な場合においても、自動的に形状が変換される。なので、
array4 = np.array([[10, 20], [30, 40]]) array5 = np.array([5, 7]) array4 + array5
とすれば、
array([[15, 27], [35, 47]])
という結果が返る。
このほか、配列を配列によって抜き出す方法を使うことで、配列の要素を条件式で抜き出すこともできる。たとえば、
array6 = np.array([1, 5, 2, 3, 4]) array6[array6 >= 3]
とすれば、
array([5, 3, 4])
となる。
PythonはC/C++に比べて処理速度が遅いことで知られるが、NumPyは内部の実装にC/C++を使っているため、NumPyを使わない場合に比べて高速に配列の演算を行うことができる。
(Python[完全]入門を参考に執筆しました。)
NumPyの主なメソッドは以下のようになる。
メソッド | 説明 |
---|---|
loadtxt() | CSVファイルの読み込み |
shape | 要素数(形状)を示す属性 |
mean() | 平均値を求める |
max() | 最大値を求める |
min() | 最小値を求める |
このほか、ブール代数インデックスといって、TrueとFalseの羅列をNumPyの配列に与えて、Trueの要素だけを取得することができる。たとえば、
array7[:, 3] >= 90
とすれば、array7の3列目が90以上の数値になる要素だけをTrueとし、それ以外はFalseとするようなインデックスを得られる。
array([False, True, True, False])
配列にこのブール代数インデックスを与えれば、配列の要素をこの条件で抜き出すことができる。
array7[array7[:, 3] >= 90]
ブール代数インデックスでは、& (AND), | (OR), ^ (XOR), ~ (NOT)などのビット演算子を使用できる。
また、すべての要素がTrueであればTrueを返すall()関数, いずれかひとつの要素がTrueであればTrueを返すany()関数がある。
2023.01.19
ネットには以下のようなNumPyの入門記事があります。