2014-03-27 3 views
17

Ich versuche alle meine Codes in Python zu konvertieren. Ich möchte ein Array mit zwei Spalten sortieren, so dass die Sortierung auf der zweiten Spalte in aufsteigender Reihenfolge basieren muss. Dann muss ich die Daten der ersten Spalte summieren (von der ersten Zeile bis zur 100. Zeile). Ich habe "Data.sort (axis = 1)" verwendet, aber es funktioniert nicht. Hat jemand eine Idee, um dieses Problem zu lösen?Wie 2D Array (numpy.darray) basierend auf der zweiten Spalte in Python zu sortieren?

Antwort

2

sorted(Data, key=lambda row: row[1]) sollte es tun.

+0

Mit diesem Befehl verwenden können, habe ich gleiches Problem wie vor, die bei der Sortierung wird dupliziert. Wenn die Eingangsdaten: Daten = [1,0 0,70 0,0 0,69 3,0 0,57 0,0 0,68 1,0 0,56 2,0 0,51] Die Sortieranlage Ergebnisse sind: [[0,0' , ‚0,68‘] [ ‚0,0‘, ‚0,69‘ ], ['0.70', '1.0'], ['0.56', '1.0'], ['0.51', '2.0'], ['0.57', '3.0'] Haben Sie eine andere Idee? – Sam

+0

Ich fürchte, ich verstehe das Problem nicht ganz. Was ist dupliziert? Wenn Ihre Eingabe 'Data' eine flache Liste ist, warum würde das Sortieren in einer Liste von Listen resultieren? –

36

Verwenden Sie .argsort() es gibt eine numpy.array von Indizes, die die angegebenen numpy.array sortieren. Sie nennen es als eine Funktion oder als eine Methode für Ihr Array. Zum Beispiel: Angenommen, Sie

import numpy as np 

arr = np.array([[-0.30565392, -0.96605562], 
       [ 0.85331367, -2.62963495], 
       [ 0.87839643, -0.28283675], 
       [ 0.72676698, 0.93213482], 
       [-0.52007354, 0.27752806], 
       [-0.08701666, 0.22764316], 
       [-1.78897817, 0.50737573], 
       [ 0.62260038, -1.96012161], 
       [-1.98231706, 0.36523876], 
       [-1.07587382, -2.3022289 ]]) 

Sie haben jetzt .argsort() auf der Spalte, die Sie sortieren möchten anrufen können, und es wird Ihnen eine Reihe von Zeilenindizes geben, die Art, dass bestimmte Spalte, die Sie als Index passieren können, um Ihre Original-Array.

>>> arr[arr[:, 1].argsort()] 
array([[ 0.85331367, -2.62963495], 
     [-1.07587382, -2.3022289 ], 
     [ 0.62260038, -1.96012161], 
     [-0.30565392, -0.96605562], 
     [ 0.87839643, -0.28283675], 
     [-0.08701666, 0.22764316], 
     [-0.52007354, 0.27752806], 
     [-1.98231706, 0.36523876], 
     [-1.78897817, 0.50737573], 
     [ 0.72676698, 0.93213482]]) 

Sie äquivalente numpy.argsort()

>>> arr[np.argsort(arr[:, 1])] 
array([[ 0.85331367, -2.62963495], 
     [-1.07587382, -2.3022289 ], 
     [ 0.62260038, -1.96012161], 
     [-0.30565392, -0.96605562], 
     [ 0.87839643, -0.28283675], 
     [-0.08701666, 0.22764316], 
     [-0.52007354, 0.27752806], 
     [-1.98231706, 0.36523876], 
     [-1.78897817, 0.50737573], 
     [ 0.72676698, 0.93213482]]) 
+1

Warum die down vote? – JaminSore

Verwandte Themen