NumPy⑫ (ベクトルの内積)

ベクトルの内積

ベクトル同士の要素の積の和を 内積 といいます。

NumPyndarrayオブジェクト には、ベクトルの内積を求める dot()メソッド が用意されています。

[Google Colaboratory]

1
2
3
4
5
import numpy as np

vec1 = np.array([2, 3])
vec2 = np.array([4, 5])
np.dot(vec1, vec2) # vec1とvec2の内積を求める

(2 × 4) + (3 × 5) の計算結果が表示されます。

[実行結果]

[Google Colaboratory]

1
2
3
vec3 = np.array([4, 5, -6])
vec4 = np.array([-2, 3, -1])
np.dot(vec3, vec4) # vec2とvec3の内積を求める

(4 × -2) + (5 × 3) + (-6 × -1) の計算結果が表示されます。

[実行結果]

NumPy⑪ (ベクトル同士の積/アダマール積)

ベクトル同士の積/アダマール積

ベクトルの掛け算については、行ベクトルと列ベクトル または 列ベクトルと行ベクトル の計算が可能ですが、行ベクトル同士 または 列ベクトル同士 の掛け算はできません。

ただし ndarrayオブジェクト で表現されるベクトルは1次元配列なので、行・列の概念がありません

足し算や引き算のように同じ次元数のベクトル同士を掛け算すると、同じ次元の成分同士が掛け算されます。

これをベクトルの アダマール積 と呼びます。

アダマール積 は、ブロードキャスト の仕組みによって実現されます。

[Google Colaboratory]

1
2
3
4
5
6
import numpy as np

vec1 = np.array([10, 20, 30])
vec2 = np.array([40, 50, 60])

vec1 * vec2 # アダマール積を求める

[実行結果]

NumPy⑩ (ベクトル同士の四則演算)

ベクトル同士の四則演算

ベクトル同士で四則演算を行うと、同じ次元の成分同士の演算が行われます。

(ブロードキャストの仕組みによって、同じ次元の成分同士で計算されます。)

ベクトル同士の演算を行うためには、次元数が同じであることが条件となります。

次元数が異なるベクトル同士を演算すると、どちらかの成分が余ってしまうのでエラーになります。

[Google Colaboratory]

1
2
3
4
5
6
import numpy as np

vec1 = np.array([10, 20, 30])
vec2 = np.array([40, 50, 60])

vec1 + vec2 # ベクトル同士の足し算

[実行結果]

[Google Colaboratory]

1
vec1 - vec2                # ベクトル同士の引き算

[実行結果]

[Google Colaboratory]

1
vec1 / vec2                # ベクトル同士の割り算

[実行結果]

本来、ベクトル同士で割り算は行えませんが、NumPyndarrayオブジェクトで表現するベクトルは、次元数が同じであればブロードキャストの仕組みが働いて同じ次元の成分同士で割り算が行われます。

NumPy⑨ (不偏分散、不偏標準偏差)

不偏分散、不偏標準偏差

統計的推定や検定を行う場合、母集団を推定する手段として不偏分散や不偏分散から求めた不偏標準偏差が使われます。

分散はデータと平均値の差の2乗(偏差平方)の合計値(偏差平方和)をデータの個数で割って計算しますが、不偏分散は偏差平方和を データの個数-1 で割って計算します。

この場合は、var()関数std()関数の引数として ddof=1 を指定します。

ddof は偏差平方和を割る時の分母(データの個数)から減らす値を指定するためのオプションです。

[Google Colaboratory]

1
2
3
4
5
6
import numpy as np
x = np.array([35, 40, 45, 50, 55, 60], dtype = np.float)

# 不偏分散、不偏標準偏差を求める
print('不偏分散  : ', np.var(x, ddof=1))
print('不偏標準偏差: ', np.std(x, ddof=1))

[実行結果]

NumPy⑧ (最大値、最小値、分散、標準偏差)

最大値、最小値、分散、標準偏差

NumPyでは、最大値や最小値、平均、分散など、基本的な統計量を求める関数が用意されています。

  • max()
    配列要素の最大値を返す。
  • min()
    配列要素の最小値を返す。
  • mean()
    配列要素の平均値を返す。
  • var()
    配列要素の分散を返す。
  • std()
    配列要素の標準偏差を返す。
  • argmax()
    最大値の要素のインデックスを返す。
  • argmin()
    最小値の要素のインデックスを返す。

[Google Colaboratory]

1
2
3
4
5
6
7
8
import numpy as np
x = np.array([35, 40, 45, 50, 55, 60], dtype = np.float)

print('最大値 : ', np.max(x))
print('最小値 : ', np.min(x))
print('平均値 : ', np.mean(x))
print('分 散 : ', np.var(x))
print('標準偏差: ', np.std(x))

[実行結果]

NumPy⑦ (切り捨て、切り上げ、四捨五入)

NumPyには、切り捨て、切り上げ、四捨五入を行うメソッドが用意されています。

切り捨て

floor()メソッドを使うと、小数部を切り捨てて、値が小さい方の整数に変換にします。

[Google Colaboratory]

1
2
3
4
import numpy as np
x = np.array([-1.8, -1.4, -1.0, -0.6, -0.2, 0., 0.2, 0.6, 1.0, 1.4, 1.8])

np.floor(x) # 切り捨て(値が小さい方の整数にする)

[実行結果]

trunc()メソッドを使うと、単純に小数部を切り捨てます。

[Google Colaboratory]

1
np.trunc(x)  # 切り捨て(小数部分を切り捨てる)

[実行結果]

切り上げ

ceil()メソッドを使うと、小数部を切り上げます。

[Google Colaboratory]

1
np.ceil(x)   # 切り上げ(大きい方の整数にする)

[実行結果]

四捨五入

round()メソッドを使うと、小数部を四捨五入します。

[Google Colaboratory]

1
np.round(x)  # 四捨五入

[実行結果]

around()メソッドを使うと、小数部を四捨五入します。

[Google Colaboratory]

1
np.around(x)  # 四捨五入

rint()メソッドを使うと、小数部を四捨五入します。

[実行結果]

[Google Colaboratory]

1
np.rint(x)

[実行結果]

0に近い方の整数

fix()メソッドを使うと、0に近い方向の整数に変換します。

[Google Colaboratory]

1
np.fix(x)     # 0に近いほうの整数をとる

[実行結果]

NumPy⑥ (ラジアンと角度の相互変換)

ラジアンと角度の相互変換

NumPyで実装されている三角関数系の関数は、基本的にラジアンを引数に設定します。

角度に π / 180 をかけるとラジアンに変換でき、ラジアンに 180 / π をかけると角度に変換できます。

NumPyにはこれらの変換処理を行う関数が用意されています。

  • radians()、deg2rad()
    角度をラジアンに変換する。
  • rad2deg()
    ラジアンを角度に変換する。

[Google Colaboratory]

1
2
3
4
import numpy as np
x = np.array([90, 180, 270], dtype = np.float)

np.radians(x) # 角度をラジアンに変換

[実行結果]

[Google Colaboratory]

1
np.deg2rad(x)              # 角度をラジアンに変換

[実行結果]

[Google Colaboratory]

1
np.rad2deg(np.deg2rad(x))  # ラジアンを角度に変換

[実行結果]

NumPy⑤ (サイン、コサイン、タンジェントの逆関数)

逆関数

NumPyで、三角関数の逆関数は各関数名の頭に arc がつきます。

例えば arcsin は、y = sin(x) のときの x の値を x = arcsin(y) として求めることができます。

出力される値は、degree(度)ではなく radian(ラジアン) になります。

[Google Colaboratory]

1
2
3
4
import numpy as np
x = np.array([0.5, 1], dtype = np.float)

np.arcsin(np.sin(x)) # sinの逆関数

[実行結果]

[Google Colaboratory]

1
np.arccos(np.cos(x)) # cosの逆関数

[実行結果]

[Google Colaboratory]

1
np.arctan(np.tan(x)) # tanの逆関数

[実行結果]

NumPy④ (サイン、コサイン、タンジェント)

NumPyにはサイン、コサイン、タンジェントを計算する関数が用意されています。

サイン

サインを計算するには sin() を使います。

引数には、degree(度)ではなく radian(ラジアン) を指定します。

[Google Colaboratory]

1
2
3
4
import numpy as np

x = np.array([0, 1], dtype = np.float)
np.sin(x)

[実行結果]

[Google Colaboratory]

1
np.sin(np.pi * 0.5)   # π/2のときのサインの値は1

[実行結果]

コサイン

コサインを計算するには cos() を使います。

引数には、degree(度)ではなく radian(ラジアン) を指定します。

[Google Colaboratory]

1
np.cos(x)

[実行結果]

[Google Colaboratory]

1
np.cos(np.pi * 0.5)    # 0になる

[実行結果]

タンジェント

タンジェントを計算するには tan() を使います。

引数には、degree(度)ではなく radian(ラジアン) を指定します。

[Google Colaboratory]

1
np.tan(x)

[実行結果]

[Google Colaboratory]

1
np.tan(np.pi * 0.5)    # 無限に発散する

[実行結果]

円周率

円周率を表す ndarray.pi も用意されています。

[Google Colaboratory]

1
np.pi  # 円周率

[実行結果]

NumPy③ (ベクトルの累乗、平方根)

ベクトルの累乗

NumPyで、累乗は power(配列, 指数) で求めることができます。

また、演算子の ** で求めることも可能です。

[Google Colaboratory]

1
2
3
import numpy as np
x = np.array([1, 2, 3, 4, 5], dtype = np.float)
np.power(x, 2)

[実行結果]

[Google Colaboratory]

1
x ** 2

[実行結果]


ベクトルの平方根

NumPyで、平方根は sqrt(x) で求めることができます。

[Google Colaboratory]

1
2
x = np.array([1, 2, 3, 4, 5], dtype = np.float)
np.sqrt(x)

[実行結果]