Arrays, Numpy und Dictionaries (sklearn.clusters.dbscan)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Popkultur
User
Beiträge: 30
Registriert: Donnerstag 20. Oktober 2016, 16:46

Folgende Arrays sind gegeben, hier zur Vereinfachung nur mit zwei Elementen. Das erste habe ich angelegt, die anderen zwei sind irgendwie numpy-arrays. x sei hier mal nicht weiter genutzt.:

Code: Alles auswählen

pos = {'könnten wenn': array([ 0.123,  0.123,  0.123], dtype=float32), 'könnten als': array([ 0.234,  0.234,  0.234 ], dtype=float32)}
x = [[ 0.123 0.123 0.123 ], [ 0.234  0.234 0.234 ]]
labels = [0.123 0.123 0.123, 0.234 0.234 0.234]
Ich möchte nun ein dictionary, in dem für jedes labels-Element für das es eine Entsprechung in pos gibt ein Eintrag erscheint wie:
{ 'könnten wenn': array([ 0.123, 0.123, 0.123], dtype=float32) }

Es gibt diesen Code:

Code: Alles auswählen

cluster_dict = {i: x[labels==i] for i in range(n_clusters_)}
Der macht was Ähnliches. Ich versteh nur leider das x[labels==i] nicht.

Ich hab mir das hier zusammengeschrieben:

Code: Alles auswählen

cluster_dict = {i: list(pos.keys())[list(pos.values()).index(x[labels==i])] for i in range(n_clusters_)}  
Aber das sagt:
The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

TL;DR: Wie kriege ich den Vergleich pos[xxx]==labels[yyy] hin?

Das Ganze ist genutzt mit sklearn.clusters.dbscan wer es kennt. Für Hilfe vielen Dank!
Popkultur
User
Beiträge: 30
Registriert: Donnerstag 20. Oktober 2016, 16:46

Code: Alles auswählen

    cluster_dict = dict()
    for i in range(n_clusters_):
        class_member_mask = (labels == i)
        new_member = list(x[class_member_mask].tolist())
        in_pos_list = list(pos.values()).index(new_member[0])
        cluster_dict.update({ i: in_pos_list }) 
Hier nochmal in Langform, geht nicht, weil in_pos_list = list(pos.values()).index(new_member[0])
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Popkultur
User
Beiträge: 30
Registriert: Donnerstag 20. Oktober 2016, 16:46

Hab das Problem umgangen.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Popkultur hat geschrieben:Hab das Problem umgangen.
Möchtest du deine Lösung mitteilen, für alle die später durch eine Suchmaschine ihrerer Wahl auf den Thread stoßen?
the more they change the more they stay the same
Popkultur
User
Beiträge: 30
Registriert: Donnerstag 20. Oktober 2016, 16:46

Das ist schwierig, denn ich habs komplett umgangen und das Problem existiert so nicht mehr. Kann also eigentlich der Thread gelöscht werden, sorry.
Antworten