Hinzufügen zwei Tupel elementweise
Ich wurde gerade gefragt, ob es war ein besonders pythonic die Zugabe von zwei Tupel elementweise?
Bisher (a und b sind Tupel), habe ich
map(sum, zip(a, b))
Meine erwartete Ausgabe wäre:
(a[0] + b[0], a[1] + b[1], ...)
Und eine mögliche Abwägung wäre zu geben, ein 0,5 Gewichts-und b 0,5 Gewicht, oder so. (Ich bin versucht, einen gewichteten Durchschnitt).
Welche gut funktioniert, aber sagen wollte ich hinzufügen, dass eine Gewichtung, ich bin mir nicht ganz sicher, wie ich das machen würde.
Dank
- Was ist Ihre erwartete Ausgabe dann?
- Sie bearbeitet Ihre
a
undb
Tupel-element Weise. Sie können auchtuple(sum(aa, bb) for aa, bb in zip(a, b))
entpacken Sie die beiden Elemente in separaten Variablen. Was wäre deine Gewichtung Formel sein? - Und statt nur
sum(i)
(odersum(aa, bb)
für diese Angelegenheit), die Sie verwenden können, einen anderen Ausdruck zu erstellen, die andere Elemente. Darunter ein Tupel mit den beiden sum und andere Werte:(sum(aa, bb), aa / bb)
zum Beispiel. - Definieren Sie Ihre eigene Funktion beinhaltet, dass die Gewichtung, anstatt
sum
- Ok, aber gibt es eine Möglichkeit, dies zu tun, ohne mit einer anderen Funktion? (Als Summe sollte grundsätzlich schneller, da drückt es den dazu unten c-code, richtig?)
- Ich kann mir vorstellen numpy hat und eins hinaus und wahrscheinlich gewichtete Durchschnitte.
- Mögliche Duplikate von Hinzufügen von Werten Von Tupeln der Gleichen Länge
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Zip dann Summe jedes Tupel.
EDIT : Hier ist eine bessere, wenn auch komplexer-version, mit der für die Gewichtung.
Alternative wäre die Anwendung der GEWICHTE der ersten. Dies würde auch ermöglichen es Ihnen, unterschiedliche GEWICHTE haben:
Wenn es Sie nicht stört, die Abhängigkeit, die Sie verwenden können, numpy für elementweise Operationen auf arrays
Nehmen Sie die Formel für die gewichtete Summe der ein paar von Koordinaten, und bilden ein Tupel mit einem iterator über jedes paar (beachten Sie die beiden Variablen nach der
for
):Dieser hält es einfach und lesbar wie ein one-liner. Natürlich, wenn Ihr "gewichtete Summe" ist eine komplexe Funktion, Sie würde es definieren als eine separate Funktion ersten.
tuple(sum(x) for x in zip(a, b))
besser ist ... undtuple(map(sum, zip(a, b)))
noch besser.sum()
ist noch schlimmer. Wenn Sie möchten, eine gewichtete Summe,sum()
ist nutzlos. Es ist auch eine Frage des Geschmacks, aber ich findesum()
mehr angemessen, wenn es einer unbestimmten Anzahl von Summanden -- hier ist es immer zwei Bedingungen Hinzugefügt werden. Jedem das seine, denke ich, aber vergessen Sie nicht, dass die gewichtete Summe ist Teil der OP ' s Frage.tuple(0.5 * sum(x) for x in zip(a, b))
. Es ist fast genauso wie deins, nur, dass es mehr funktionsfähig ist (und wohl pythonic auch).0.7*a + 0.3*b
. Aber eigenen code schreiben, wie du willst.sum
für die Ergänzung mit gewichten.) De gustibus et coloribus...Wenn Ihr Tupeln enthalten
str
Objekte: