2016-07-30 5 views
3

Ich versuche, ein Array (10000, 50) Größe (Ich erwähne die Größe, weil Effizienz wichtig ist) zu schaffen, und dann:Wie in absteigender Reihenfolge der Hälfte des 2D-Arrays sortieren (numpy)

  • Die ersten 5000 Zeilen aufsteigend sortieren
  • Die nächsten 5000 Zeilen in absteigender Reihenfolge sortieren.

Hier ist mein Code:

samples = 10 # I'm going to increase it 10000 
sampleLength = 4 # I'm going to increase it 50 
halfSamples = int(samples/2) 

xx = numpy.multiply(10, numpy.random.random((samples, sampleLength))) 
xx[0:halfSamples,0:sampleLength]=numpy.sort(xx[0:halfSamples,0:sampleLength],axis=1) 
xx[halfSamples:samples,0:sampleLength]=numpy.sort(xx[halfSamples:samples,0:sampleLength],axis=1) 

Dies aufsteigend sowohl Hälfte des Feldes sortiert wird, ist das einzige, was ich finden kann nicht, welche Parameter in meiner letzten Zeile zu geben, es zu machen, in eine absteigende Reihenfolge.

Ich habe versucht, auf diesen Link basiert: Reverse sort a 2d numpy array in python

xx[halfSamples:samples,0:sampleLength]=numpy.sort(xx[halfSamples:samples,0:sampleLength:-1],axis=1) 

bekam aber einen Fehler:

ValueError: could not broadcast input array from shape (5,0) into shape (5,4) 

Dank

+3

Anhang '[:, :: - 1]' am Ende der letzten Zeile anhängen? – Divakar

Antwort

4

Es wäre wahrscheinlich schneller sein, um die Anordnung an Ort und Stelle zu sortieren mit seine .sort Methode, anstatt np.sort, die eine Kopie zurückgibt. Sie können die zweite Dimension mit einer negativen Schrittgröße indizieren, um die Spalten der letzten 5000 Zeilen in absteigender Reihenfolge zu sortieren:

x = np.random.randn(10000, 50) 
x[:5000].sort(axis=1) 
x[-5000:, ::-1].sort(axis=1) 
+0

Was ist die Bedeutung der -5000, warum ist es das gleiche wie 5000: 10000? – OopsUser

+0

Die negative Indizierung ist relativ zum Ende des Arrays, also indexiert x [-5000:] 'die 5000. Zeile vom Ende des Arrays an. 'x [-1]' würde Ihnen die letzte Zeile geben, 'x [-10:]' würde Ihnen die letzten 10 Zeilen usw. geben. –

+0

Große Antwort, danke – OopsUser