2017-05-18 1 views
1

sortieren Ich versuche, eine Liste wie folgt zu sortieren und umzukehren:Kann keine Liste in Python

train_eigen_pairs = [(np.abs(train_eigen_vals[i]),train_eigen_vec[:,i]) for i in range(len(train_eigen_vals))] 
train_eigen_pairs.sort(reverse=True) 
# Also tried : 
reversed(sorted(train_eigen_pairs)) 
# and 
reversed(train_eigen_pairs.sort()) 

Bei allen drei Varianten ich folgende Fehlermeldung:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

Update

Nach dem erneuten Versuch, ich denke, die Lösung für das Problem b, um das Tupel basierend auf der ersten Spalte zu sortieren: hier ist, was ich habe ried, aber die Sortierung dauert zu lange.

Offenbar vermisse ich etwas, weil es die IDE abstürzt. Die erste Spalte enthält Float-Werte, die zweite komplexe.

train_eigen_pairs[0][0] is a float 
train_eigen_pairs[0][1] is a complex vector 

Irgendeine Idee, wie kann ich das lösen? Vielen Dank im Voraus!

+0

Sie haben einen Schlüssel vorbei zu sortieren. Dies kann ein Lambda sein. Sie sortieren eine Liste von Tupeln '(np.abs (train_eigen_vals [i]), train_eigen_vec [:, i])'. Das zweite Element des Tupels ist jedoch ein numpy Array und Python kann es nicht implizit so sortieren, wie es ist. –

+0

Vergleicht man zwei Arrays, entsteht ein Boolesches Array, kein Boolean. Dies geschieht, wenn der Tupelvergleich das zweite Element jedes Tupels vergleicht. – chepner

+0

@chepner Entschuldigung, aber ich kann nicht folgen was meinst du ich kann komplexe Zahl als Werte in train_eigen_pairs sehen. Ich möchte sie basierend auf dem Wert von train_eigen_vals sortieren und dann die Sortierung umkehren – Engine

Antwort

0

Nach mehreren Varianten versuchen, hier derjenige ist, gearbeitet, ich hoffe es da draußen jemand helfen kann:

train_eigen_pairs.sort(key=lambda x:x[0],reverse=True) 
+0

' sortiert (train_eigen_pairs, key = Lambda x: x [0], reverse = True) ' das funktioniert auch auf die gleiche Weise. – pramod