Python 配列の基本計算

基本的な算術演算


算術演算子による配列の演算では、配列が同じ形状の場合は対応する要素ごとに演算が行われる。演算の結果、要素が浮動小数点数になる場合には、返される配列のデータ型は浮動小数点数型になる。

スクリーンショット 2020-08-06 13.13.15

演算する2つの配列の形状が異なる場合は、形状の小さい方が大きい方の配列の形状に一致するように拡大されて計算される。この処理はブロードキャスティングと呼ばれ、プログラムの内部で自動的に行われる。

スクリーンショット 2020-08-06 13.14.01

同様に、形状が(1, 2)と(2, 1)の配列の演算では、各配列が(2, 2)の配列に拡大されて演算される。

スクリーンショット 2020-08-06 13.14.32

次に、2つの配列の次元が等しくない場合の演算について。まず2つの配列の次元数が一致するまで小さい次元の配列に左から長さ1の新たな軸が追加される。そして、長さ1の次元は先ほどと同様に拡大され、2つの配列が同じ形状になれば計算される。

スクリーンショット 2020-08-06 13.15.06

配列とスカラーの演算もブロードキャストが適用される。スカラーは形状が(1,)の1次元配列と同じように扱われる。

スクリーンショット 2020-08-06 13.15.52

ユニバーサル関数


NumPyには配列に対して、要素ごとに処理を行う様々な関数が実装されている。これをユニバーサル関数やufuncと呼ぶ。ufuncの特徴は処理が高速なことである。ufuncの一部として以下のようなものがある。

スクリーンショット 2020-08-06 13.16.46

詳しくは公式ドキュメント https://numpy.org/doc/stable/reference/ufuncs.html#ufunc を参照のこと。

スクリーンショット 2020-08-06 13.17.30

比較演算


比較演算子で配列を比較するとブール値の配列を得られる。なお、算術演算子の場合と同様、比較演算子についてもブロードキャスティングの規則が適用される。

スクリーンショット 2020-08-06 13.18.06

ブール値の配列では論理演算子&や|を使って要素ごとの論理和と論理積を求めることができる。

スクリーンショット 2020-08-06 13.18.41

all関数は配列の要素がすべてTrueであればTrueを返す。any関数は要素に1つでもTrueが含まれていればTrueを返す。

スクリーンショット 2020-08-06 13.20.09

算術演算においては要素のTrueとFalseはそれぞれ1と0として扱われる。この性質を利用し、ブール値の配列を使って様々な数値配列を作れる。

スクリーンショット 2020-08-06 13.20.35

ベクトルや行列の積


NumPyの配列では*演算子による演算は行列の要素ごとの積を計算する。これはアダマール積(Hadamard product)などと呼ばれる行列の乗法に対応する。 ベクトルや行列の情報にはほかにも様々な定義が存在し、最も重要な定義が行列の積(Matrix product)と呼ばれるものである。行列の積は@演算子やnp.dot関数を使って計算できる。

スクリーンショット 2020-08-06 13.21.24

行列の積ABは下のように計算される。ABは2つの配列と@演算子を用いてA @ Bで計算することができる。

スクリーンショット 2020-08-06 13.21.56

行列とベクトルの積も@演算子で行列の積として演算できる。@演算子やnp.dot関数は2つの配列の次元が異なる場合でも演算できる。

スクリーンショット 2020-08-06 13.22.27

https://colab.research.google.com/drive/1CCy2L2zaUXafKYLtwTY9OEu3tvov_HJD?usp=sharing

この記事が気に入ったらサポートをしてみませんか?