2013-02-14 17 views
6

私はnumpyを使い、いくつかの値を含む配列(ndarray型)を持っています。この配列の形状は1000x1500です。私はPython、numpyソート配列

brr.reverse() 
AttributeError: ‘numpy.ndarray’ object has no attribute ‘reverse’ 

をしようとしたとき、私はそれを

brr = np.reshape(arr, arr.shape[0]*arr.shape[1]) 

を作り直さエラーが発生します。 この配列をどのように並べ替えることができますか?

+0

ソートまたはリバース? –

+0

'reverse()'に何を期待していますか? – NPE

+1

あなたの問題は解決しませんが、コードをもっときめ細かく、より効率的にするには、arr.shape [0] * arr.shape [1] 'の代わりに' arr.size'を使用することができます。 – Junuxx

答えて

23

あなたはそれを逆にしたい場合:

brr[:] = brr[::-1] 

配列に複数のを持っている場合にも、他の軸に戻すことができ0実は、これは軸に沿って反転します。

>>> arr = np.random.random((1000,1500)) 
>>> brr = np.reshape(arr, arr.shape[0]*arr.shape[1]) 
>>> brr.sort() 
>>> brr = brr[::-1] 
>>> brr 
array([ 9.99999960e-01, 9.99998167e-01, 9.99998114e-01, ..., 
    3.79672182e-07, 3.23871190e-07, 8.34517810e-08]) 

又は、argsortを使用して:逆の順序でソートする

>>> arr = np.random.random((1000,1500)) 
>>> brr = np.reshape(arr, arr.shape[0]*arr.shape[1]) 
>>> sort_indices = np.argsort(brr)[::-1] 
>>> brr[:] = brr[sort_indices] 
>>> brr 
array([ 9.99999849e-01, 9.99998950e-01, 9.99998762e-01, ..., 
     1.16993050e-06, 1.68760770e-07, 6.58422260e-08]) 
+0

いいえ、ソートされていません。降順にソートする必要があります – user2046488

+0

ありがとう!幸運にもargsort()を試してみました。知らなかった[: - 1] – user2046488

12

はで1Dアレイをソートするには、降順でソートするため

import numpy as np 
a = np.array([1,3,4,5,6]) 
print -np.sort(-a) 
2

これを試してください降順に、reverse = Trueをsortedに渡します。 @Erikが指摘したように、sortedはまずリストのコピーを作成し、それを逆順にソートします。

import numpy as np 
import random 
x = np.arange(0, 10) 
x_sorted_reverse = sorted(x, reverse=True) 
+5

sortedは、まずすべてのデータをリストにコピーした後、ソートを逆順に行うpythonの反復可能なソートを使用します。これは実際にはデータの逆ソートを行いますが、numpyではそうしないので、numpyを使用することの利点はほとんどありません。 – Erik

+0

これを共有してくれてありがとう、Erik。私は答えに加えました。 – rafaelvalle

関連する問題