2017-01-04 4 views
2

argsortという関数を使って配列の各カラムをソートするインデックスを取得しようとしています。しかし、真のインデックスの代わりに単にゼロを返すだけです。例:numpyカラムをソートするインデックスを見つけると、ゼロが返されます

x = np.matrix([[5, 2, 6], [3, 4, 1]]) 
print(x) 

print(x[:,0]) 
print(x[:,1]) 
print(x[:,2]) 

print(x[:,0].argsort()) 
print(x[:,1].argsort()) 
print(x[:,2].argsort()) 

これは3つの配列を返すと予想しています。 [1 0],[0 1]および[1 0]は、ソートされた各列のインデックスを示していますが、代わりに3つの配列にすべてゼロが含まれています。

ご迷惑をおかけして申し訳ありません。常に戻り別の2次元matrixスライスmatrixインデックス作成

答えて

3

。 (この動作は、通常のnumpyの配列と同じではない。)参照、例えば、x[:,0]の出力:

In [133]: x[:,0] 
Out[133]: 
matrix([[5], 
     [3]]) 

x[:,0]形状とmatrix(2、1)です。 その行列の最初の(そして唯一の)列をargsortするには、あなたが最初の軸を使用するようにargsortを伝える必要があります:

In [135]: x[:,0].argsort(axis=0) 
Out[135]: 
matrix([[1], 
     [0]]) 

デフォルト(axis=-1)が最後の軸を使用することであり、その内の行から行列の長さが1の場合、axisが指定されていない場合の結果はゼロの列です。ところで


、一度にすべての列を行うことができます。

In [138]: x 
Out[138]: 
matrix([[5, 2, 6], 
     [3, 4, 1]]) 

In [139]: x.argsort(axis=0) 
Out[139]: 
matrix([[1, 0, 1], 
     [0, 1, 0]]) 
関連する問題