1
t_index = np.argsort(adj, axis = 0)[:,::-1]  # 54 x 54 shape   
t = np.sort(adj, axis= 0)[:,::-1] # 54 x 54
t[5:,] = 0
adj = t[t_index] # 54 x 54 x 54

54 x 54 の形状を返す代わりに、54 x 54 x 54 です。どうすれば同じ形状を取得できますか? なぜ三次元なの?

4

1 に答える 1

2

t[t_index]構文がどのように機能するかを理解するのに役立つように、構文を使用する人の例を挙げましょう。カラー パレットを使用してイメージを表すために、整数配列を使用することがあります。256 色、RGB 値のそれぞれは、形状 (256, 3) を持つパレット配列に格納されます。画像は、0 ~ 255 の (1000, 1000) 整数の配列、またはパレット配列のインデックスとして格納されます。たとえば、表示目的で RGB イメージを作成する場合rgbimage = pallet[image]は、(1000, 1000, 3) の RGB イメージを作成します。

更新: argsort を含めて質問を更新したようです。この質問に似たようなことをしようとしているのかもしれません。2 次元配列の場合、短いバージョンは次のようになります。

s = np.random.random((54, 54))
t = np.random.random((54, 54))
axis = 0

t_index = s.argsort(axis)
idx = np.ogrid[:t.shape[0], :t.shape[1]]
idx[axis] = t_index
t_sort = t[idx]

これがどのように機能するかについての適切な説明を探していましたが、適切な説明が見つからないようです。誰かがどのように機能するかogrid、または numpy インデックス作成でのブロードキャストがどのように機能するかについての良い参照を持っている場合は、コメントにメモを残してください。役立つ短い説明を書きます。tが 2 次元配列で、各列から 2 つの要素を選択したい場合、次のようにします。

t = np.arange((12)).reshape(3, 4)
print t
# [[ 0,  1,  2,  3],
#  [ 4,  5,  6,  7],
#  [ 8,  9, 10, 11]]

print t[[0, 3], :]
# [[ 0  1  2  3]
#  [ 8  9 10 11]]

各行から異なる要素が必要だと想像してみてください。

row_index = [[0, 2],
             [0, 2],
             [1, 2],
             [0, 1]]
t[row_index]
# Which in python is the same as
t[row_index, :]

しかし、それはうまくいきません。:はすべての列を意味するため、この動作は驚くべきことではありません。前の例では、すべての列で 0 を取得し、すべての列で 2 を取得しました。実際に必要なのは次のとおりです。

row_index = [[0, 2],
             [0, 2],
             [1, 2],
             [0, 1]]
column_index = [[0, 0],
                [1, 1],
                [2, 2],
                [3, 3]]
t[row_index, column_index]

Numpy では、値が繰り返されるだけなので、以下をごまかして使用することもできます。

column_index = [[0],
                [1],
                [2],
                [3]]

これをよりよく理解するには、ブロードキャストについて読んでください。この説明がお役に立てば幸いです。

于 2013-10-16T23:22:30.287 に答える