Ich frage mich zuerst, was ist labels
bei jedem Schritt in der Schleife?
Mit dist_ = array([2,1,2])
und TLabels=array([1,2,3])
ich
[-1 1]
[1]
[-1 1]
Die unterschiedliche Länge sofort eine Warnung Fahne heben - es schwierig sein kann, dies vektorisieren.
Mit der längeren Arrays im editierten Beispiel
[-1 1 -1 -1 -1]
[ 1 1 1 1 -1]
[-1 1 -1 -1 -1]
[ 1 1 1 1 -1]
[ 1 1 1 1 -1]
[-1 1 -1 -1 -1]
[-1 1 -1 -1 -1]
[ 1 1 1 1 -1]
[ 1 1 1 1 -1]
[-1 1 -1 -1 -1]
Die labels
Vektoren alle gleich lang sind. Ist das normal oder nur ein Zufall der Werte?
Tropfen ein paar Elemente aus der dist_
und labels
sind:
In [375]: for i in range(len(dist_)):
labels = TLabels[dist_ == dist_[i]]
v = (1.*np.sum(labels)/t); v1 = 1-TLabels[i]*v
print(labels, v, TLabels[i], v1)
cLoss += v1
.....:
(array([-1, 1, -1, -1]), -0.25, -1, 0.75)
(array([1, 1, 1, 1]), 0.5, 1, 0.5)
(array([-1, 1, -1, -1]), -0.25, 1, 1.25)
(array([1, 1, 1, 1]), 0.5, 1, 0.5)
(array([1, 1, 1, 1]), 0.5, 1, 0.5)
(array([-1, 1, -1, -1]), -0.25, -1, 0.75)
(array([-1, 1, -1, -1]), -0.25, -1, 0.75)
(array([1, 1, 1, 1]), 0.5, 1, 0.5)
Wieder unterschiedliche Längen von Etiketten, aber wirklich nur ein paar Berechnungen. Es gibt 1 v
Wert für jeden anderen Wert.
Ohne alle Details auszuarbeiten, sieht es so aus, als ob Sie nur labels*labels
für jeden einzelnen Wert berechnen und diese dann summieren.
Dies sieht wie ein groupBy
Problem aus. Sie wollen die dist_
in Gruppen mit einem gemeinsamen Wert aufteilen und eine Funktion ihrer entsprechenden TLabels
Werte addieren. Python itertools
hat eine groupBy
Funktion, so funktioniert pandas
. Ich denke, beide erfordern Sie zu sortieren dist_
.
Versuchen Sie, dist_
zu sortieren und sehen Sie, ob das dem Problem Klarheit verleiht.
Was versuchen Sie zu erreichen? –
Nun, ich glaube, dass es korrekt ist, TLabels [dist_ == dist_ [i]] 'wird Werte von' TLabels' zurückgeben, die Indizes haben, wobei 'dist_ == dist_ [i] '. Zum Beispiel lasst 'dist_ = array ([2,1,2])' und 'TLabels = array ([1,2,3])' 'so' dist_ == dist_ [0] 'wird' array zurückgeben ([True, Falsch, Wahr]) 'als' TLabels [dist_ == dist_ [0]] = Array ([1,3]) ' – farhawa
Nur um klar zu sein, sind die Arrays' (t, 1) 'oder' (t,) '? Wo wird 'cLoss' initialisiert? – hpaulj