2013-02-14 11 views
6

Ich benutze numpy und habe ein Array (ndarray type), die einige Werte enthalten. Form dieses Arrays 1000x1500. Ich umgestaltet esPython, numpy Sortierfeld

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

wenn ich

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

get Fehler zu versuchen. Wie kann ich dieses Array sortieren?

+0

sortieren oder umgekehrt? –

+0

Was erwarten Sie 'reverse()' zu tun? – NPE

+1

Löst Ihr Problem nicht, aber um Ihren Code etwas übersichtlicher und effizienter zu machen, können Sie 'arr.size' anstelle von' arr.shape [0] * arr.shape [1] 'verwenden. – Junuxx

Antwort

23

Wenn Sie es nur umkehren wollen:

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

Eigentlich kehrt diese Achse entlang 0. Sie auch auf einer anderen Achse zurückkehren könnte, wenn das Array mehr als eine hat.

in umgekehrter Reihenfolge zu sortieren:

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

oder argsort Verwendung:

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

Nein, es ist unsortiert, ich muss es absteigend sortieren – user2046488

+0

Danke! Versucht argsort() ohne Glück. Wusste nicht über [:: - 1] – user2046488

12

Diese Versuchen für in absteigender Reihenfolge sortiert wird,

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

um einen 1D-Array zu sortieren in absteigende Reihenfolge, pass reverse = True zu sorted. Als @Erik wies darauf hin, sorted wird zuerst eine Kopie der Liste machen und dann in umgekehrter Reihenfolge sortieren.

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

sortiert verwendet Python iterable Sortierung, die zuerst alle Daten in eine Liste kopieren und dann die Sortierung in umgekehrter Reihenfolge tun. Dies führt zwar zu einer umgekehrten Sortierung der Daten, tut dies jedoch nicht in Anzahlen und entfernt im Allgemeinen den Nutzen der Verwendung von numpy. – Erik

+0

Danke für das Teilen, Erik. Ich habe es der Antwort hinzugefügt. – rafaelvalle