1

特定の行列で対角線を形成する数値の合計を返す関数を作成する必要があります。
Python初心者なので、問題があります。これは私のコードです:

def diagonal(matrix):
    return sum([matrix[i][i] for i in range(len(matrix))])

しばらく試してみましたが、「リストインデックスが範囲外です」というエラーに関するレポートが常に返されるため、何が問題なのかわかりません。

輸入できませnumpy

あらゆる形のヘルプ、ヒント、アドバイスをいただければ幸いです。

4

3 に答える 3

4

行列が長方形 (len(matrix[i])のすべてのリストで同じmatrix) であることが確実な場合は、より小さい次元が続く限り、リストを合計できます。

def diagonal(matrix):
    return sum([matrix[i][i] for i in range(min(len(matrix[0]),len(matrix)))])

len(matrix)は行列の最初len(matrix[0])の次元で、 は最初の行ベクトルの次元であり、長方形行列の 2 番目の次元です。

于 2013-12-17T13:31:45.843 に答える
2

インデックスのいずれかがそれぞれの次元を超えたときに停止する必要があります。たとえば、スライスで行列を制限できます。

def diagonal_sum(matrix):
    row_size = len(matrix[0])
    return sum(row[i] for i, row in enumerate(matrix[:row_size]))

デモ:

>>> diagonal_sum([[1,2],[3,4],[5,6]])
5
于 2013-12-17T13:27:57.853 に答える
1

diagonal非正方行列に対しては定義されていないと思います。minしたがって、コードが何かを返すためだけに 2 次元の を選択しない方がよいでしょう。

では、代わりに次のようにします。

def diagonal(matrix):
    try:
        return sum([matrix[i][i] for i in range(len(matrix))])
    except IndexError:
        print "Bad Matrix! :("
于 2013-12-17T13:30:17.487 に答える