問題: この問題では、As と呼ばれる行列のリストが与えられます。あなたの仕事は、それぞれの QR 因数分解を見つけることです。
qr_by_gram_schmidt の実装: この関数は行列 A を入力として取り、QR 分解を計算し、2 つの変数 Q と R を返します。ここで、A=QR であり、Q は直交し、R は対角線より下にゼロです。
A は、n≧m の n×m 行列です (つまり、列より行が多い)。
修正された Gram-Schmidt 手順を使用して、この関数を実装する必要があります。
入力:
As: 配列のリスト
出力:
Qs: qr_by_gram_schmidt によって出力された Q 行列のリスト (As と同じ順序)。形状が n×m の行列 A の場合、Q は形状が n×m でなければなりません。
Rs: qr_by_gram_schmidt が As と同じ順序で出力した R 行列のリスト。形状が n×m の行列 A の場合、R は形状が m×m でなければなりません
私は正しいと信じているQR因数分解のコードを書きました:
import numpy as np
def qr_by_gram_schmidt(A):
m = np.shape(A)[0]
n = np.shape(A)[1]
Q = np.zeros((m, m))
R = np.zeros((n, n))
for j in xrange(n):
v = A[:,j]
for i in xrange(j):
R[i,j] = Q[:,i].T * A[:,j]
v = v.squeeze() - (R[i,j] * Q[:,i])
R[j,j] = np.linalg.norm(v)
Q[:,j] = (v / R[j,j]).squeeze()
return Q, R
As の各行列の QR 分解を計算し、それらをその順序で格納するループを作成するにはどうすればよいですか?
編集: コードにもエラーがあります。デバッグにご協力いただければ幸いです。
ありがとう