Web制作、Web開発の歩き方

初心者のためのDjango入門

■第13話:Numpyでの算術演算

(最終更新日:2023.06.07)

Djangoフレームワークのイメージ
この記事は4分で読めます!
(絵が小さい場合はスマホを横に)

「NumPyで計算しよう!」

前回、初期化や等間隔な値の作成、 インデックスやスライス、配列の変形などNumPy配列の基本的な操作について学んだ。 今回は数学的な操作である、四則演算からブロードキャスティング、内積、行列積の計算方法について学ぼう。


1.NumPy配列の四則演算

NumPyは、標準的な算術演算子(+、-、*、/など)を使用して配列に対する要素単位の演算を簡単に行うことができる。 下記に最も基本的な四則演算の例を示す。 見て分かるように、同じ要素の位置にある数値同士で計算を行っている。 ちなみに、四則演算以外にも、べき乗(**)、切り捨て除算(//)、剰余演算(%)なども使える。

NumPy配列の四則演算

NumPy配列の四則演算

さらに、NumPyは様々な数学的な関数(sin、cos、exp、logなど)を提供しており、これらの関数はすべて配列に対する要素単位の操作を可能にする。 例えば、np.sin(np.radians([0, 90]))とすれば、各要素はsin0°とsin90°に相当し、[0, 1]となる。

また、NumPyは比較演算子(<、>、<=、>=、==、!=)もサポートしており、これを使用して配列の要素を比較することができる。 これは配列のマスキング(指定した条件に合致する要素を抽出する)という強力な機能を可能にする。 例えば下記では、>=を用いることで、4以上の要素を抽出して1つの配列に格納している。

NumPy配列のマスキング

NumPy配列のマスキング

以上のような算術演算や数学的な関数を使用することで、NumPyは柔軟で効率的な数値計算を提供する。

2.NumPy配列のブロードキャスティング

NumPyにはブロードキャスティングという機能がある。 これは、形状の異なる配列間で算術演算を行うための強力なメカニズムである。 NumPyのブロードキャスティングルールにより、一部の条件下で小さな配列と大きな配列の間で演算を可能にする。 例えば下記では、aは1×3のnp配列、bは数値の2で、これらの積を計算することで、1×3の全ての要素に対して2を掛けることができている。 これは、要素数の等しいnp配列を用意しなくても、np配列全ての要素に同一の計算を行うことができることを意味し、 非常に効率的に計算できる。強力な計算機能である。

NumPy配列のブロードキャスティング

NumPy配列のブロードキャスティング

3.NumPy配列によるドット積(内積)、行列積の計算

NumPyは、線形代数で良く使われる内積や行列積の計算にも対応している。 以下がそれらに相当する。内積とはある成分方向に貢献した力の積で、 行列積はあるベクトルに対して線形変換したものである。線形変換では90°角度を回転させたりすることができる。 数学的手法について、この場で細かく説明する気はないが、そのような計算が簡単に行える。

NumPy配列のドット積

NumPy配列のドット積

NumPy配列の行列積

NumPy配列の行列積


4.まとめ

今回、NumPy配列の応用となる四則演算、三角関数を含めた数学的な演算、 ブロードキャスティング、内積、ドット積について説明した。 中でもブロードキャスティングは専門領域でなくても、計算の効率化として非常に威力を発揮する。 是非、覚えておいておこう。


▼参考図書、サイト

Numpy の dot() 関数は引数によって「ドット積(内積)」や「行列積」の計算になる  kakakakakku blog
Numpyのブロードキャストの挙動  Qiita
行列のかけ算のやり方まとめ。例題から分かる行列の積の考え方  アタリマエ!
マスキング  スキルアップTips