Codierung sigma-Formel?
Python-Anfänger, ausgeführt 2.7
Ich nicht finden können, ein Pythonic Weg, um code, der die folgende Formel. Mein Ziel ist es, eine Funktion in der ich die Eingabe der Werte (bei früheren versuchen habe ich nur die gefunden, die eine hoch repetitive brute-force-Lösung).
Notwendigen Informationen:
wenn Sie nicht wissen, was die sigma-symbol bedeutet: schauen Sie hier
# 'v' is the formula
# 'i' 'j' 'k' are actors with numerical attributes 'c' 's' and 'x'
# 'n' = length of the following lists (length is identical for all four lists)
values_1 = [Bob, Sue, Mary, Jo...] # i, j, and k are any 3 values drawn from this list
# under the condition that i != j != k
values_2 = [5,6,7,8...] # c is drawn from this list.
# if i = values_1[0], then c(i) = values_2[0].
# same for j and k
values_3 = [9,10,11,12...] # s is drawn from this list.
# if i = values_1[0], then s(i) = values_3[0]
values_4 = [13,14,15, 16..] # x is drawn from this list.
# if i = values_1[0], then x(i) = values_4[0].
def V (j,k):
#this is where I need help!
v_Bob_Sue = # this is where V(Bob, Sue) should go.
# this is what the math would look like in English:
# SUM of (c_Mary * s_Mary * ((abs(x_Mary - x_Sue) - abs(x_Mary - x_Bob)) /x's range))
# and (c_Jo * s_Jo * ((abs(x_Jo - x_Sue) - abs(x_Jo - x_Bob)) /x's range))
# Bob and Sue are the j and k value
# we do the formula with all the other actors (from values_1) who AREN'T Bob and Sue
v_Bob_Mary = # etc
v_Bob_Jo =
v_Sue_Bob =
v_Sue_Mary =
v_Sue_Jo =
v_Mary_Bob =
v_Mary_Sue =
v_Mary_Jo =
v_Jo_Bob =
v_Jo_Sue =
v_Jo_Mary =
ich gehe davon aus, dass diese Formel ist etwas, das ist bekannt durch einige Namen, kann Sie link der name der Formel/websites, so kann ich verstehen, den Prozess, es passiert in Ihr?
Die Mathematik stellt einen Prozess namens " pairwise voting.' en.wikipedia.org/wiki/Pairwise_comparison Die spezielle Formel ist aus einer Forschungsarbeit in einer for-pay-wissenschaftlichen Zeitschrift. Ich bin mir nicht sicher, ob es ok ist urheberrechtlich geschütztes IP auf StackOverflow?
naja, kann man erklären, die mathematische Schreibweise in deiner Frage dann?
OK, das hinzufügen es in die post nun.
zunächst haben Sie versucht, mit einem Wörterbuch anstelle von mehreren Listen, deren Indizes sind die gleichen? (zum Beispiel:
Die Mathematik stellt einen Prozess namens " pairwise voting.' en.wikipedia.org/wiki/Pairwise_comparison Die spezielle Formel ist aus einer Forschungsarbeit in einer for-pay-wissenschaftlichen Zeitschrift. Ich bin mir nicht sicher, ob es ok ist urheberrechtlich geschütztes IP auf StackOverflow?
naja, kann man erklären, die mathematische Schreibweise in deiner Frage dann?
OK, das hinzufügen es in die post nun.
zunächst haben Sie versucht, mit einem Wörterbuch anstelle von mehreren Listen, deren Indizes sind die gleichen? (zum Beispiel:
{'Bob': [5,9,13], 'Sue': [6,10,14],...}
??
InformationsquelleAutor user1569317 | 2012-08-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als für die "sigma", die Berechnung ist ziemlich einfach, wie es ist, auch als eine "Summe". Es gibt eine eingebaute Funktion in python : http://docs.python.org/library/functions.html#sum
Als für die Formel, die Sie bieten, denke ich, dass das, was Sie wirklich vermissen hier sind Listen oder arrays. i, j und k die Indizes der n-dimensionale arrays.
Ich würde das numpy-Paket :
Hier Bob und Sue sind kodiert es indice position in der values_1 Liste. Dies macht es viel leichter, als das arbeiten mit strings oder Instanzen der Klasse. So würden Sie schreiben :
Wenn Sie möchten, um automatisch die Variablen erstellen v_Bob_Sue und solche, die Sie brauchen, um zu definieren, Variablennamen dynamisch. Also müssen Sie die exec-Anweisung wie folgt :
funktioniert wie ein Charme, Dank so viel.
Ich denke, es ist wahrscheinlich nicht eine gute Idee, diese Variablen so. Ich denke, die "richtige" Art und Weise, dies zu tun ist, um nur diese als broadcast-Betrieb von einigen Sortieren. Vielleicht eine 3D-matrix, die Summen nach unten, um eine 2D-matrix.
InformationsquelleAutor Nicolas Barbey
Mit python 3.6.x, Sie könnten versuchen,...
InformationsquelleAutor Tit Poplatnik