NumPy 配列に関する基本計算
- スカラーと配列の四則演算
- 配列と配列の四則演算
- 算術関数:配列の各要素に個別に演算するもの
- 算術関数:配列の複数要素をまとめて演算するもの
- 1次元の配列とベクトル、ベクトルの内積
- 2次元の配列と行列、行列の積、行列の転置
スカラーと配列の四則演算
スカラーと配列の四則演算は、スカラーと配列の各要素の四則演算となる。
import numpy as np aaa = np.array([[1, 2, 3, 4], [5, 6, 7, 8]]) print(10 + aaa) # スカラー + 配列 # [[11 12 13 14] # [15 16 17 18]] print(aaa + 10) # 配列 + スカラー # [[11 12 13 14] # [15 16 17 18]] print(10 - aaa) # スカラー - 配列 # [[9 8 7 6] # [5 4 3 2]] print(aaa - 10) # 配列 + スカラー # [[-9 -8 -7 -6] # [-5 -4 -3 -2]] print(10 * aaa) # スカラー * 配列 # [[10 20 30 40] # [50 60 70 80]] print(aaa * 10) # 配列 * スカラー # [[10 20 30 40] # [50 60 70 80]] print(10 / aaa) # スカラー / 配列 # [[ 10. 5. 3.33333333 2.5 ] # [ 2. 1.66666667 1.42857143 1.25 ]] print(aaa / 10) # 配列 / スカラー # [[ 0.1 0.2 0.3 0.4] # [ 0.5 0.6 0.7 0.8]]
配列と配列の四則演算
配列と配列の四則演算は、配列の各要素毎の四則演算となる。
import numpy as np aaa = np.array([[10, 20, 30, 40], [50, 60, 70, 80]]) bbb = np.array([[1, 2, 3, 4], [5, 6, 7, 8]]) print(aaa + bbb) # 配列 + 配列 # [[11 22 33 44] # [55 66 77 88]] print(aaa - bbb) # 配列 - 配列 # [[ 9 18 27 36] # [45 54 63 72]] print(aaa * bbb) # 配列 * 配列 # [[ 10 40 90 160] # [250 360 490 640]] print(aaa / bbb) # 配列 / 配列 # [[ 10. 10. 10. 10.] # [ 10. 10. 10. 10.]]
算術関数:配列の各要素に個別に演算するもの
累乗関数np.power() 又は a**b
平方根np.sqrt()
指数関数np.exp()
対数関数np.log(), np.log2(), np.log10()
import numpy as np aaa = np.array([[1, 2, 3, 4], [5, 6, 7, 8]]) # 累乗 print(np.power(aaa, 2)) # aaa の 2乗 print(aaa**2) # 上式と結果は同じ # [[ 1 4 9 16] # [25 36 49 64]] print(np.power(2, aaa)) # 2 の aaa乗 print(2**aaa) # 上式と結果は同じ # [[ 2 4 8 16] # [ 32 64 128 256]] print(np.power(aaa, aaa)) # aaa の aaa乗 print(aaa**aaa) # 上式と結果は同じ # [[ 1 4 27 256] # [ 3125 46656 823543 16777216]] # 平方根 print(np.sqrt(aaa)) # aaa の平方根 print(aaa**0.5) # 上式と結果は同じ # [[ 1. 1.41421356 1.73205081 2. ] # [ 2.23606798 2.44948974 2.64575131 2.82842712]] # 指数関数 print(np.exp(aaa)) # eのaaa乗 # [[ 2.71828183e+00 7.38905610e+00 2.00855369e+01 5.45981500e+01] # [ 1.48413159e+02 4.03428793e+02 1.09663316e+03 2.98095799e+03]] # 対数関数 print(np.log(aaa)) # 底がe # [[ 0. 0.69314718 1.09861229 1.38629436] # [ 1.60943791 1.79175947 1.94591015 2.07944154]] print(np.log2(aaa)) # 底が2 # [[ 0. 1. 1.5849625 2. ] # [ 2.32192809 2.5849625 2.80735492 3. ]] print(np.log10(aaa)) # 底が10 # [[ 0. 0.30103 0.47712125 0.60205999] # [ 0.69897 0.77815125 0.84509804 0.90308999]]
算術関数:配列の複数要素をまとめて演算するもの
総和np.sum()、最大np.max()、最小np.min()
平均np.mean()、分散np.var()、標準偏差np.std()
引数にkeepdim=Trueと入れると、入力配列の次元数と同じ次元数の配列を出力する。入れないと、適宜次元数を下げたものを出力する。
import numpy as np aaa = np.array([[1, 2, 3, 4], [5, 6, 7, 8]]) # 配列のすべての総和 print(np.sum(aaa, keepdims=True)) # [[36]] print(np.sum(aaa)) # 36 # 配列の各行の総和 print(np.sum(aaa, axis=0, keepdims=True)) # [[ 6 8 10 12]] print(np.sum(aaa, axis=0)) # [ 6 8 10 12] # 配列の各列の総和 print(np.sum(aaa, axis=1, keepdims=True)) # [[10] # [26]] print(np.sum(aaa, axis=1)) # [10 26]
下記の関数も、上記と同様にできるが省略。
# 最大 print(np.max(aaa)) # 8 # 最小 print(np.min(aaa)) # 1 # 平均 print(np.mean(aaa)) # 4.5 # 分散 print(np.var(aaa)) # 5.25 # 標準偏差 print(np.std(aaa)) # 2.29128784748
1次元の配列とベクトル、ベクトルの内積
1次元の配列で、ベクトルを表す。
ベクトルの内積は、.dot()メソッド、np.dot()関数、演算子@で求める。
下記では、上式の計算を行っている。
import numpy as np # 1次元の配列で、ベクトルを表す vec1 = np.array([1,2,3]) vec2 = np.array([6,7,8]) # ベクトルの内積 aa = vec1.dot(vec2) bb = np.dot(vec1, vec2) cc = vec1 @ vec2 print(aa) # 44 print(bb) # 44 print(cc) # 44 # 上記3つの式は、同じ結果となる。
2次元の配列と行列、行列の積、行列の転置
2次元の配列で、行列を表す。
行列の積は、.dot()メソッド、np.dot()関数、演算子@で求める。
下記では、上式の計算を行っている。
import numpy as np # 2次元の配列で、行列を表す mtx1 = np.array([[1, 2, 3], [4, 5, 6]]) mtx2 = np.array([[30], [20], [10]]) # 行列の積 aaa = mtx1.dot(mtx2) bbb = np.dot(mtx1, mtx2) ccc = mtx1 @ mtx2 print(aaa) # [[100] # [280]] print(bbb) # [[100] # [280]] print(ccc) # [[100] # [280]] # 上記3つの式は、同じ結果となる。
2次元配列の行と列を入れ替える転置は、.T属性で求める。
1次元配列に対して.T属性を使用しても、効果は特にない。
import numpy as np mtx1 = np.array([[1, 2, 3], [4, 5, 6]]) ddd = mtx1.T print(ddd) # [[1 4] # [2 5] # [3 6]] vec1 = np.array([1, 2, 3]) dd = vec1.T print(dd) # [1 2 3]