2017-08-17 22 views
0

配列の値を降順でソートしようとしています。昇順で試してみるとうまくいくが、下降するとエラーが出る。配列内の値をソートする: 'reverse'はこの関数の無効なキーワード引数です

e = np.array([[5.,3.,8.],[6.,7.,1.],[4.,8.,2.]]) 
e.sort() 

結果:

今は逆の順序で
e = array([[3.,5.,8.],[1.,6.,7.],[2.,4.,8.]]) 

e.sort(reverse=True) 

結果:

TypeError: 'reverse' is an invalid keyword argument for this function 

私もfrom operator import itemgettere.sort(key=itemgetter(1))を試してみましたが、同じエラーA ppears( 'reverse'は 'key'に置き換えられます)。

これはなぜですか?なぜそれは機能しませんか?なぜこのエラー(キーまたはリバース権を使用する方法)ですか?

+0

私の結果はここにあります:[link](https://stackoverflow.com/questions/14875248/python-numpy-sort-array/14875366) 'f = -np.sort(-e)'完璧に働いた! –

答えて

0

なぜこのような場合は昇順に座った後fliplrを使用してみてください?なぜそれは機能しませんか?

単にnumpy's sort機能がその機能を提供しないためです。

この問題を「修正」する1つの方法は、対象の列をargsortすることです。その後、出力を反転し、あなたが望むようにソートされた項目を取得するために、インデックスeにそれを使用することができます。

>>> import numpy as np 
>>> e = np.array([[5.,3.,8.],[6.,7.,1.],[4.,8.,2.]]) 
>>> e 
array([[ 5., 3., 8.], 
     [ 6., 7., 1.], 
     [ 4., 8., 2.]]) 
>>> col = 0 
>>> idx_asc = np.argsort(e[:, col]) 
>>> idx_desc = idx_asc[::-1] 
>>> e[idx_desc] 
array([[ 6., 7., 1.], 
     [ 5., 3., 8.], 
     [ 4., 8., 2.]]) 

このアプローチはあまり柔軟性(と不便)であることに注意してくださいkeyreverse=Trueを渡すことができることよりも。特に、複数の列をソートしてタイを解除する場合、この方法は失敗します。

+0

列は特別な関心事ではなく、すべての行が個別にソートされる必要があります。 –

+0

@SVerhoef - あなたは彼らが 'key = itemgetter(1)'で何を得ているのか分かりません。 – mgilson

0

numpy documentationに従ってkeyまたはreverseキーワード引数を使用できませんでした。配列を昇順にソートし、次に[::-1]スライスで反転するか、reversed()ビューを使用します。

関連する問題