Seite 1 von 1
Array-addition
Verfasst: Dienstag 26. November 2019, 17:34
von RcReese
Hallo ich habe ein eher triviales Problem komme aber grade beim besten Willen nicht auf die Lösung...
Ich möchte aus einem dictionary verschiedene Einträge auslesen (jeder dieser Einträge ist ein array mit 8760 Spalten) und diese Einträge (bzw. arrays dann addieren, so dass schlussendlich ein einzelner array mit 8760 Spalten entsteht.
Das auslesen aus dem dictionary habe ich wie folgt gelöst:
Code: Alles auswählen
sum_presence=[]
for k in range (len(zones)):
sum_presence.append(dic[zones[k]][3])
Wie kann ich die einzelnen arrays jetzt addieren?
Re: Array-addition
Verfasst: Dienstag 26. November 2019, 18:00
von nezzcarth
Listen (das ist, was du mit [] erzeugst) haben eine 'extend'-Methode, die sollte dir hier weiterhelfen. Abgesehen davon, kannst du gleich über das Objekt iterieren, ohne Indices
Re: Array-addition
Verfasst: Dienstag 26. November 2019, 18:01
von __blackjack__
@RcReese: In Deinem anderen Thema wurde schon mal gesagt das man in Python *direkt* über die Elemente von Sequenzen iteriert, ohne den Umweg über einen Index:
Code: Alles auswählen
sum_presence = []
for zone in zones:
sum_presence.append(dic[zone][3])
Beziehungsweise als „list comprehension“ in einer Zeile:
`dic` ist kein guter Name, weil der nichts darüber verrät was die Schlüssel/Werte in dem Wörterbuch *bedeuten*. Aus dem gleichen Grund ist die ”magische” 3 nicht gut. Dafür könnte man eine aussagekräftige Konstante definieren. Oder einen eigenen Datentyp für die Werte die in dem Wörterbuch gespeichert sind.
Arrays kann man mit ``+`` addieren, wenn Du mit ”Array” Numpy-Arrays meinst und nicht schon wieder Listen – die keine Arrays sind.
Ansonsten geht addieren von Zahlen mit ``+``. Und wenn man Listen elementweise addieren möchte, muss man eben genau das tun: Die Elemente der beiden Listen addieren. `map()`, `operator.add()`, und `list()` sind da die passenden Bausteine. Wenn man eine Funktion geschrieben hat die zwei Listen elementweise addiert, kann man `functools.reduce()` verwenden um viele von diesen Listen mit Hilfe dieser Funktion aufzuaddieren.
Re: Array-addition
Verfasst: Dienstag 26. November 2019, 19:16
von RcReese
@__blackjack__
Kannst du mir kurz sagen wieso das so wichtig ist, dass man den Umweg über den Index sein lässt? Ich persönlich finde es so für mich übersichtlicher/verständlicher und das Resultat ist im Endeffekt ja genau das gleiche?
Dass 'dic' kein guter Name ist da hast du natürlich Recht, den wollte ich auch definitiv noch ändern.
Ja, wenn ich 'Arrays' schreibe meine ich Numpy-Arrays, diese sind auch so in Pycharm deutlich als {array} gekennzeichnet. Dass man diese recht einfach über den "+"-Operator addieren kann ist mir klar, das geht aber nur wenn ich vorher weiß wieviele arrays ich addieren möchte. Da sich die Anzahl der zu addierenden arrays hier aber ändern wird suche ich einen Weg wie ich das gescheit machen kann.
Bei den von dir vorgeschlagenen Lösungen über map() oder operator.add() habe ich dann das Problem, dass ja mindestens 2 Argumente eingegeben werden müssen; auch hier weiß ich dann nicht weiter, da ich aufgrund der veränderlichen Anzahl der Arrays in der Liste ja nicht einfach sagen kann addiere Zeile 1 zu Zeile 2.
Re: Array-addition
Verfasst: Dienstag 26. November 2019, 19:29
von __blackjack__
@RcReese: Der Umweg über einen unnötigen Index ist halt umständlicher und eigentlich auch nur ”übersichtlicher” wenn man es gewohnt ist es umständlicher zu machen. Und es ist unflexibler weil dafür das Objekt über dessen Elemente man iterieren möchte sowohl eine abfragbare Länge als auch Indexzugriff mit ganzen Zahlen bieten muss. Wenn man direkt über die Elemente iteriert kann das wirklich jedes beliebige iterierbare Objekt sein.
Wieso musst Du wissen wie viele Arrays Du addieren musst? Es gibt ja so etwas wie Schleifen. Aber auch das braucht man nicht selbst machen, denn wenn ``+`` geht braucht man gar nicht `reduce()` und sich selbst eine Funktion schreiben, sondern kann einfach die `sum()`-Funktion verwenden: