4

正方行列の行(または列)の数nが与えられた場合、1次元リストで下三角行列のインデックスペアを取得しようとしています。これまでのところ、私は次の解決策を考えました:

def getLowerTriangularIndices(n):
    inds=[];         
    for i in range(1,n):
        for j in range(i):
            inds.append((i,j))
    return inds;

2つのforループを考慮すると、おそらくnumpyを使用してこれを計算するより効率的な方法がある方がはるかに良いでしょう。誰か提案がありますか?

4

1 に答える 1

6

Numpyにはそのための方法があります...

import numpy as np

# create your matrix. If it's not yet a numpy array, make it one
ar = np.array(matrix)
indices = np.tril_indices_from(ar)

これは、2 つの配列のタプルを返します。それらをリストとして持ちたい場合は、次のことができます

indices = [list(x) for x in np.tril_indices_from(ar)]

実際には、インデックスを取得するために配列を持つ必要はありませんnp.tril_indices。形状を引数として取る もあります。

したがって、関数は次のようになります。

def getLowerTriangularIndices(n):
    return [list(x) for x in np.tril_indices(n)]

または、代わりにタプルのリストが必要な場合:

def getLowerTriangularIndices(n):
    return zip(*np.tril_indices(n)]
于 2013-01-11T08:49:07.530 に答える