NumPy数値解析ライブラリのサンプルコード集です。
使い方の備忘録的な感じで残していきます。
常時更新していきます!
行列の生成 [numpy.array]
<コード>
import numpy as np
# 行列Aの定義
matA = np.array([[2.0, 5.0, 8.0],
[1.0, 3.0, 6.0],
[7.0, 9.0, 4.0]])
# 行列Aの表示
print(matA)
<実行結果>
[[2. 5. 8.]
[1. 3. 6.]
[7. 9. 4.]]
行列のスカラー倍 [mat * スカラー値]
<コード>
import numpy as np
# 行列Aの定義
matA = np.array([[2.0, 5.0, 8.0],
[1.0, 3.0, 6.0],
[7.0, 9.0, 4.0]])
# 行列Aのスカラー倍の計算
matAns = matA * 3
# 計算結果の表示
print(matAns)
<実行結果>
[[ 6. 15. 24.]
[ 3. 9. 18.]
[21. 27. 12.]]
行列のべき乗 [mat ** スカラー値]
<コード>
import numpy as np
# 行列Aの定義
matA = np.array([[2.0, 5.0, 8.0],
[1.0, 3.0, 6.0],
[7.0, 9.0, 4.0]])
# 行列Aのべき乗の計算
matAns = matA ** 2
# 計算結果の表示
print(matAns)
<実行結果>
[[ 4. 25. 64.]
[ 1. 9. 36.]
[49. 81. 16.]]
行列の積 [matA @ matB]
<コード>
import numpy as np
# 行列Aの定義
matA = np.array([[2.0, 5.0, 8.0],
[1.0, 3.0, 6.0],
[7.0, 9.0, 4.0]])
# 行列Bの定義
matB = np.array([[9.0, 4.0, 5.0],
[2.0, 1.0, 8.0],
[7.0, 6.0, 3.0]])
# 行列Aと行列Bの積の計算
matAns = matA @ matB
# 計算結果の表示
print(matAns)
<実行結果>
[[ 84. 61. 74.]
[ 57. 43. 47.]
[109. 61. 119.]]
転置行列 [mat.T]
<コード>
import numpy as np
# 行列Aの定義
matA = np.array([[2.0, 5.0, 8.0],
[1.0, 3.0, 6.0],
[7.0, 9.0, 4.0]])
# 行列Aの転置行列を求める
matAns = matA.T
# 行列Aの転置行列の表示
print(matAns)
<実行結果>
[[2. 1. 7.]
[5. 3. 9.]
[8. 6. 4.]]
行列式 [numpy.linalg.det()]
<コード>
import numpy as np
# 行列Aの定義
matA = np.array([[2.0, 5.0, 8.0],
[1.0, 3.0, 6.0],
[7.0, 9.0, 4.0]])
# 行列Aの行列式det(A)の計算
detA = np.linalg.det(matA)
# 計算結果の表示
print(detA)
<実行結果>
10.00000000000001
逆行列 [numpy.linalg.inv()]
<コード①>
import numpy as np
# 行列Aの定義
matA = np.array([[2.0, 5.0, 8.0],
[1.0, 3.0, 6.0],
[7.0, 9.0, 4.0]])
# 行列Aの逆行列invAの計算
invA = np.linalg.inv(matA)
# 逆行列invAの表示
print("逆行列 = ")
print(invA)
print()
# 行列とその逆行列の積は単位行列Iとなる
ideMat = matA @ invA
# 行列Aとその逆行列の積の表示
print("行列Aとその逆行列の積 = ")
print(ideMat)
<実行結果①>
逆行列 =
[[-4.2 5.2 0.6]
[ 3.8 -4.8 -0.4]
[-1.2 1.7 0.1]]
行列Aとその逆行列の積 =
[[ 1.00000000e+00 -1.77635684e-15 1.11022302e-16]
[ 8.88178420e-16 1.00000000e+00 1.11022302e-16]
[ 2.66453526e-15 -3.55271368e-15 1.00000000e+00]]
※単位行列Iの対角成分以外が完全に0となっていませんが、演算過程での桁落ちや情報落ちが原因であると考えられます。
逆行列はその性質上、行列式が0となる場合は逆行列は存在しません。
逆行列が存在しない行列の逆行列を求めようとすると例外numpy.linalg.linalg.LinAlgErrorが返されるようです。
<コード②>
import sys
import numpy as np
# 行列Aの定義
matA = np.array([[2.0, 4.0, 8.0],
[1.0, 2.0, 4.0],
[7.0, 9.0, 4.0]])
# 行列Aの行列式det(A)の計算
detA = np.linalg.det(matA)
# 行列式の表示
print("行列式 = ", detA)
# 行列Aの逆行列invAの計算
try:
invA = np.linalg.inv(matA)
except np.linalg.linalg.LinAlgError:
sys.exit("行列式が0の時は逆行列は存在しない!")
# 行列Aの逆行列の表示
print("逆行列 = ")
print(invA)
<実行結果②>
行列式 = 0.0
行列式が0の時は逆行列は存在しない!
固有値と固有ベクトル [numpy.linalg.eig()]
<コード>
import numpy as np
# 行列Aの定義
matA = np.array([[2.0, 5.0, 8.0],
[1.0, 3.0, 6.0],
[7.0, 9.0, 4.0]])
# 行列Aの固有値(eigval)と固有ベクトル(eigvec)の計算
eigval, eigvec = np.linalg.eig(matA)
# 計算結果の表示
print("固有値 =")
print(eigval)
print()
print("固有ベクトル =")
print(eigvec)
<実行結果>
固有値 =
[14.9841486 -0.11368296 -5.87046564]
固有ベクトル =
[[-0.58749204 -0.71750212 -0.4756348 ]
[-0.4009467 0.65993343 -0.45542063]
[-0.7029188 -0.22288689 0.75257131]]
コメント