1

最高値のインデックスから最低値まで、numpy 配列を反復処理したい

import numpy as np #imports numpy package

elevation_array = np.random.rand(5,5) #creates a random array 5 by 5

print elevation_array # prints the array out

ravel_array = np.ravel(elevation_array)
sorted_array_x = np.argsort(ravel_array)
sorted_array_y = np.argsort(sorted_array_x)

sorted_array = sorted_array_y.reshape(elevation_array.shape)

for index, rank in np.ndenumerate(sorted_array):
    print index, rank

印刷したい:

最高値の指標 次の最高値の指標 次の最高値の指標 etc

4

2 に答える 2

3

面倒な作業を numpy で行いたい場合は、次のようにすることができます。

>>> a = np.random.rand(100, 100)
>>> sort_idx = np.argsort(a, axis=None)
>>> np.column_stack(np.unravel_index(sort_idx[::-1], a.shape))
array([[13, 62],
       [26, 77],
       [81,  4],
       ..., 
       [83, 40],
       [17, 34],
       [54, 91]], dtype=int64)

最初に配列全体をソートするインデックスを取得し、次にそのフラット インデックスを でインデックスのペアに変換しnp.unravel_indexます。の呼び出しnp.column_stackは、座標の 2 つの配列を 1 つの配列に結合するだけzip(*np.unravel_index(sort_idx[::-1], a.shape))であり、配列の代わりにタプルのリストを取得するために Python に置き換えることができます。

于 2013-07-26T22:24:39.937 に答える
2

これを試して:

from operator import itemgetter

>>> a = np.array([[2, 7], [1, 4]])
array([[2, 7],
       [1, 4]])

>>> sorted(np.ndenumerate(a), key=itemgetter(1), reverse=True)
[((0, 1), 7), 
 ((1, 1), 4), 
 ((0, 0), 2), 
 ((1, 0), 1)]

必要に応じて、このリストを繰り返すことができます。基本的に、キーに従ってsorted要素を並べ替えるように関数に指示しています。この関数は、 によって生成されたタプル... (つまり、値)から 2 番目 (インデックス 1) の要素を取得します。np.ndenumerate(a)itemgetter(1)itemgetter((0, 1), 7), ((1, 1), 4),np.ndenumerate(a)

于 2013-07-26T22:00:28.300 に答える