10

例として簡略化したNumPyマトリックスがあります。

       a  b  c  d  e  f 
A =  [[0, 1, 2, 3, 4, 5],
 b    [1, 0, 3, 4, 5, 6],
 c    [2, 3, 0, 5, 6, 7],
 d    [3, 4, 5, 0, 7, 8],
 e    [4, 5, 6, 7, 0, 9],
 f    [5, 6, 7, 8, 9, 0]]

ここで、「交差点」の番号は重要ですが、それらの順序は正しくありません。新しい順序が[a、d、b、e、c、f]になるように行と列を再配置したいのですが、私が「交差点」と呼んでいるこの値は同じです。

以下では、マトリックスを希望どおりに変換し始めました。'e'行を埋めるには、上記の交差点で(e、a)(= 4)、(e、d)(= 7)、(e、b)(= 5)、(e、e)の順になります。 、(e、c)、および(e、f)

       a  d  b  e  c  f
A1=  [[0, 3, 1, 4, 2, 5],
 d    [3, 0, 4, 7, 5, 8],
 b    [1, 4, 0, 5, 3, 6],  
 e    [4, 7, 5, 

誰かが私のマトリックスをこのように再配置する方法を提案できますか?

4

2 に答える 2

17

編集:高度なインデックスを使用するNumPyソリューションに出くわしました:

#                 a  b  c  d  e  f
A = numpy.array([[0, 1, 2, 3, 4, 5],
                 [1, 0, 3, 4, 5, 6],
                 [2, 3, 0, 5, 6, 7],
                 [3, 4, 5, 0, 7, 8],
                 [4, 5, 6, 7, 0, 9],
                 [5, 6, 7, 8, 9, 0]])

#            a  d  b  e  c  f
new_order = [0, 3, 1, 4, 2, 5]
A1 = A[:, new_order][new_order]

これは、NumPyに転送できる純粋なPythonソリューションです。

#     a  b  c  d  e  f
A = [[0, 1, 2, 3, 4, 5],
     [1, 0, 3, 4, 5, 6],
     [2, 3, 0, 5, 6, 7],
     [3, 4, 5, 0, 7, 8],
     [4, 5, 6, 7, 0, 9],
     [5, 6, 7, 8, 9, 0]]

#            a  d  b  e  c  f
new_order = [0, 3, 1, 4, 2, 5]    # maps previous index to new index
A1 = [[A[i][j] for j in new_order] for i in new_order]

結果:

>>> pprint.pprint(A1)
[[0, 3, 1, 4, 2, 5],
 [3, 0, 4, 7, 5, 8],
 [1, 4, 0, 5, 3, 6],
 [4, 7, 5, 0, 6, 9],
 [2, 5, 3, 6, 0, 7],
 [5, 8, 6, 9, 7, 0]]

これがその場で変更されるバージョンですA

A[:] = [A[i] for i in new_order]
for row in A:
    row[:] = [row[i] for i in new_order]
于 2012-06-07T17:48:54.287 に答える
3

Numpyは、xisに沿って要素を回転させる、すべての軸を回転させる、軸交換するなど、配列を操作するための多くの方法を提供します。これらの組み合わせを使用して、要素の目的の順序を取得できます

于 2012-06-07T17:54:23.983 に答える