scipy.linalg.solveを使ってみる
使用例
方程式
行列形式で表された連立方程式arr_a * arr_x = arr_b
をarr_x
について解く。
import numpy as np from scipy import linalg arr_a = np.random.randint(1, 10, size=(5, 5)) #array([[7, 5, 2, 5, 9], # [7, 3, 7, 6, 1], # [9, 1, 9, 9, 1], # [1, 9, 8, 3, 8], # [9, 4, 8, 9, 9]]) arr_x = np.random.randint(1, 10, size=(5, 5)) #array([[2, 4, 1, 3, 4], # [5, 4, 3, 7, 7], # [8, 3, 2, 1, 9], # [3, 2, 8, 6, 2], # [2, 6, 7, 9, 5]]) arr_b = arr_a @ arr_x #array([[ 88, 118, 129, 169, 136], # [105, 79, 85, 94, 129], # [124, 91, 109, 106, 147], # [136, 118, 124, 164, 185], # [147, 148, 172, 198, 199]]) linalg.solve(arr_a, arr_b) #array([[2., 4., 1., 3., 4.], # [5., 4., 3., 7., 7.], # [8., 3., 2., 1., 9.], # [3., 2., 8., 6., 2.], # [2., 6., 7., 9., 5.]])
もちろん、linalg.inv
を使っても同様の解が得られる。
linalg.inv(arr_a) @ arr_b #array([[2., 4., 1., 3., 4.], # [5., 4., 3., 7., 7.], # [8., 3., 2., 1., 9.], # [3., 2., 8., 6., 2.], # [2., 6., 7., 9., 5.]])
どうやら両者同じ関数を呼びでしているようだが、それがFortran
だったので追うのを諦めた。