2016-06-16 7 views
2

に優れていることが並べ替えられます私はnumpyの配列を持っていると私は、例えば0に優れているソートトップ値のインデックスを持っているWAN:numpyの:トップ値のインデックスが0

[-0.4, 0.6, 0, 0, 0.4, 0.2, 0.7] 

そして、私が持っていると思います:

[6, 1, 4, 5] 

私は私が実現される機能を使用してそれを行うことができますが、私はすでにnumpyの実装に何かがあるタスクのこの種のためにね。

答えて

3

あなたも行うことができます。

L = [-0.4, 0.6, 0, 0, 0.4, 0.2, 0.7] 

[L.index(i) for i in sorted(filter(lambda x: x>0, L), reverse=True)] 

Out[72]: [6, 1, 4, 5] 
2

あなたはnp.where

a = np.array([-0.4, 0.6, 0, 0, 0.4, 0.2, 0.7]) 
np.where(a > 0)[0].tolist() 

結果

[1, 4, 5, 6] 

で実装することができますnp.where(a > 0)の結果がnumpyの配列の組の形です。したがって、リストを使用してリストに変換できますtolist()

+0

うんけど何 -

idx = np.where(A>0)[0] out = idx[A[idx].argsort()[::-1]] 

サンプル実行? – mel

1

np.where()を使用してください。

d > 0.0はブール型マスクを生成し、whereはマスクが真であるすべての値を取得します。

>>> d=np.array([-0.4, 0.6, 0, 0, 0.4, 0.2, 0.7]) 
>>> r=np.where(d > 0) 
>>> s=sorted(r[0].tolist(), key=lambda x:d[x], reverse=True) 
>>> s 
[6L, 1L, 4L, 5L] 

EDIT

は、ここで私はマスクによって意味です。

>>> mask = d > 0 
>>> mask 
array([False, True, False, False, True, True, True], dtype=bool) 
+0

ええ、インデックスの順番はどうですか? – mel

2

ここでベクトル化されたアプローチだ - インデックスの順序について

In [37]: A = np.array([-0.4, 0.6, 0, 0, 0.4, 0.2, 0.7]) 

In [38]: idx = np.where(A>0)[0] 

In [39]: idx[A[idx].argsort()[::-1]] 
Out[39]: array([6, 1, 4, 5]) 
関連する問題