アプローチ#1
使用行に沿ってnp.argsort
と私たちの入力配列と同じ形状のマスクを与えるために最初の列に対応するインデックス0
探し。最後に、目的のランク出力のマスク内の一致の列インデックス(True)を取得します。だから、実装は次のようになり -
np.where(a.argsort(1)==0)[1]
アプローチ#2
一度にすべての列のランクを取得する別の方法として、以前の方法をわずかに変更になります。実装は次のようになります -
(a.argsort(1)).argsort(1)
をだから、最初の列のランクを取得するには、それの最初の列のインデックス、そうのような -
(a.argsort(1)).argsort(1)[:,0]
サンプル実行
In [27]: a
Out[27]:
array([[1, 2, 3, 4],
[4, 2, 5, 6],
[6, 5, 0, 3]])
In [28]: np.where(a.argsort(1)==0)[1]
Out[28]: array([0, 1, 3])
In [29]: (a.argsort(1)).argsort(1) # Ranks for all cols
Out[29]:
array([[0, 1, 2, 3],
[1, 0, 2, 3],
[3, 2, 0, 1]])
In [30]: (a.argsort(1)).argsort(1)[:,0] # Rank for first col
Out[30]: array([0, 1, 3])
In [31]: (a.argsort(1)).argsort(1)[:,1] # Rank for second col
Out[31]: array([1, 0, 2])
投稿されたソリューションはあなたのために機能しましたか? – Divakar
@Divakarはい、ありがとう – maple