3

numpy/scipy に、正方行列の三角形 (上または下) の 1 つのすべての要素を返す関数はありますか?

例えば:

matrix = [[1,  2,  3],
          [4,  5,  6],
          [7,  8,  9]]

三角形 (上下):

up = [1,2,3,5,6,9]
down = [1,4,5,7,8,9]

また

up = [1,2,5,3,6,9]
down = [1,4,7,5,8,9]

ありがとうございました!

編集:

はい、それを行うのに役立つ 2 つの関数があります: np.triu_indices(n)(上の三角形の場合) とnp.tril_indices(n)(下の三角形の場合)。

ありがとうカトリエラレックス!

4

2 に答える 2

9

要素の順序は重要ですか?

通常、行列の上三角形と下三角形は、もう一方の対角線 (左上から右下) について取得されます。これを修正するには、 で行うことができる 2 つの対角線の間で「反転」する必要がありますnp.fliplr(matrix)。これにより、正しい要素が得られますが、「自然な」順序になります (行ごとに、各行が短くなります)。逆に反転することで、列ごとの順序を取得することもできます ( np.flipud)。しかし、一度に 1 つの対角線を読み取る以外に、使用している「小さな対角線による読み取り」順序を取得する方法がわかりません。

対角要素を取得するには、np.triu_indices(または、下の三角形の場合はnp.tril_indices) を使用してインデックスを取得し、それによってインデックスを作成します。

>>> matrix
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
>>> np.fliplr(matrix)[np.triu_indices(3)]
array([3, 2, 1, 5, 4, 7])
于 2012-05-31T19:27:08.310 に答える