正方行列をピボットして LU 分解するコードを見つけたのですが、理解できないものがあります。
def pivotize(m):
"""Creates the pivoting matrix for m."""
n = len(m)
ID = [[float(i == j) for i in xrange(n)] for j in xrange(n)]
for j in xrange(n):
row = max(xrange(j, n), key=lambda i: abs(m[i][j]))
if j != row:
ID[j], ID[row] = ID[row], ID[j]
return ID
まず、ID の行は単なる恒等行列ではないでしょうか。これを行う利点はありますか?
第二に、行の行がよくわかりません。ラムダはテキスト内の関数を定義するために使用され、i の値が提供されると M_ij の値を返すだけであることは知っています (j の値は for ループに依存します)。しかし、i とは何ですか?
xrange は range に似ていませんか? しかし、それはここで何を返しますか?
関数 max と組み合わせるとどうなるでしょうか。比較されている max 関数内のものが何であるかはわかりません。
この質問が愚かに聞こえる場合は申し訳ありません。私はプログラミングにかなり慣れていません