2013-02-14 22 views
6

Sto usando numpy e ho un array (tipo narray) che contiene alcuni valori. Forma di questo array 1000x1500. Ho rimodellato loPython, array di ordinamento numpy

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

quando ho cercando

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

errore get. Come posso ordinare questo array?

+0

ordine o inverso? –

+0

cosa ti aspetti 'reverse()' da fare? – NPE

+1

Non risolve il tuo problema, ma per rendere il tuo codice un po 'più ordinato e più efficiente puoi usare 'arr.size' invece di' arr.shape [0] * arr.shape [1] '. – Junuxx

risposta

23

Se si desidera solo per invertire tale tendenza:

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

In realtà, questa inverte lungo l'asse 0. Si potrebbe anche tornare in qualsiasi altro asse, se l'array ha più di una.

per ordinare in ordine inverso:

>>> 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]) 

o utilizzando 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

No, non è ordinato, devo ordinarlo decrescente – user2046488

+0

Grazie! Ho provato argsort() senza fortuna. Non sapevo su [:: - 1] – user2046488

12

Prova questo per classificare in ordine decrescente,

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

Per ordinare un array 1D in ordine decrescente, passaggio inverso = Vero a sorted. Come indicato da @Erik, sorted creerà prima una copia dell'elenco e quindi la ordinerà al contrario.

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

ordinato usa l'ordinamento iterabile di python, che prima copierà tutti i dati in un elenco e poi eseguirà l'ordinamento al contrario. Mentre questo in effetti comporta un ordinamento inverso dei dati, non lo fa in numpy, e in genere rimuove qualsiasi beneficio dell'uso di numpy. – Erik

+0

Grazie per aver condiviso questo, Erik. L'ho aggiunto alla risposta. – rafaelvalle