Pythonで行列を行階段形に縮小する方法



How Reduce Matrix Into Row Echelon Form Python



解決:

ガウス過程は再帰的であるため、コードで使用します。

import numpy as np def row_echelon(A): '' '行列Aの行階段形を返す' ''#行列Aに列または行がない場合、#すでにREFにあるため、r、c = Aを返します。 r == 0またはc == 0の場合の形状:Aを返す#範囲内のiの最初の列でゼロ以外の要素を検索します(len(A)):if A [i、0]!= 0:break else :#最初の列のすべての要素がゼロの場合、#2番目の列の行列に対してREFを実行しますB = row_echelon(A [:、1:])#次に最初のゼロ列を追加しますreturn np.hstack([A [:、:1]、B])#最初の行にゼロ以外の要素が発生しない場合、#i> 0の場合に行を切り替えます:ith_row = A [i] .copy()A [i] = A [0 ] A [0] = ith_row#最初の行をその中の最初の要素で除算しますA [0] = A [0] / A [0,0]#後続のすべての行を最初の行で減算します(最初の要素として1があります) )#最初の列の対応する要素を掛けるA [1:]-= A [0] * A [1:、0:1]#2番目の列からの行列に対してREFを実行しますB = row_echelon(A [1:、1:])#最初の行と最初の(ゼロ)列を追加します、およびreturn return np.vstack([A [:1]、np.hstack([A [1:、:1]、B])])A = np.array([[4、7、3、8] 、[8、3、8、7]、[2、9、5、3]]、dtype = 'float')row_echelon(A)

次のようなものを自由に追加してくださいいくつかの構造を理解していない場合はprint(A [1:、:1])