2016-03-23 38 views
3

私は配列のリストを持っており、リスト内の他の配列内の同様の配置された番号に対して番号をランク付けしたいと思います。配列のリストの各位置で順位をつける - Python

x = [[12,7,3], 
    [4 ,5,6], 
    [7 ,8,9]] 

私は次のことを試してみましたし、それが最小の数が、私は最大の数でランク付けしたい1

scipy.stats.rankdata(x) 

array([ 9.,5.5,1.,2., 3.,4.,5.5,7.,8. ]) 

が1位にランクインし、各番号のみにランクランクされているすべての数字に対して、各数字にランクしても リストの各配列内の同じ位置にある番号と比較します。

これは私が必要とする出力です。

[[1,2,3] 
[3,3,2], 
[2,1,1]] 
+0

あなたの質問は何ですか?あなたは何をしていないのですか? –

+0

コメントをする前に、よく質問をお読みください。 – Erich

答えて

1

またnumpy.argsort魔法を使用することができます。

import numpy as np 

x = np.array([[12,7,3], 
       [4 ,5,6], 
       [7 ,8,9]]) 

y = x.shape[0] - np.argsort(np.argsort(x, axis = 0), axis = 0) 

出力:

In [111]: y 
Out[111]: 
array([[1, 2, 3], 
     [3, 3, 2], 
     [2, 1, 1]]) 
0

あなたがランクに沿って軸を指定する必要があります。デフォルトでは、昇順に従ってランクが与えられます。データの形状に関する知識を使用して、必要なものに変えることができます。あなたのデータは、実施例は

x = [[12,7,3], 
    [4 ,5,6], 
    [7 ,8,9]] 
3-scipy.stats.mstats.rankdata(x,axis=0)+1 
# you will get 
array([[ 1., 2., 3.], 
     [ 3., 3., 2.], 
     [ 2., 1., 1.]]) 
関連する問題