Wie setzte ich die typischen Zählschleifen aus C in Python um?

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
Pumpen_Heinrich
User
Beiträge: 3
Registriert: Mittwoch 27. April 2022, 10:35

Guten Tag allerseits,

ich arbeite mich gerade in Python ein und habe Schwierigkeiten bei dem Umgang mit meinem 64darray. Dieser stellt quasi eine Matrix da, mit jeweils 64 Einträgen. Nun möchte ich gerne die Summe aus den Werten pro Array ermitteln. In C habe ich sowas immer über for-Schleifen gemacht, z.B j=0, for(i=0,i<63, i++): if i>=63 than j=j+1 als nicht lauffähiges Beispiel. Mit dem Integer j hätte ich dann den Zeilenwechsel vollzogen.

Wenn ich bei Python for x in data_array reingehe und Beispielsweise sage :np.sum(data_array) gibt er mir ja die Summe aller Einträge der Arrays aus. Wie gebe ich Python die Randbedingung, dass er in der Schleife die Summe für die einzelnen Arrays bilden soll und diese als neuen Array abspeichert? Sprich von folgenden Array:
[[ 0. 0. 0. ... 0. 0. 0. ] #Zeile1
[ 2.92359375 2.92359375 2.92359375 ... 2.92359375 2.92359375
2.92359375] #Zeile 2
...
[ 5.8471875 5.8471875 5.8471875 ... 5.8471875 5.8471875
5.8471875 ] #Zeilex

zu:

[Sum(Zeile1), Sum(Zeile2), ...., Sum(Zeilex)]

Über ein Schlagwort oder Gednakenasntoß würde ich mich freuen. Eine Komplettlösung ist auch meinerseits nicht gewünscht.

VG Pumpen_Heinrich
narpfel
User
Beiträge: 691
Registriert: Freitag 20. Oktober 2017, 16:10

Das Schlagwort ist `axis`. Steht in der Dokumentation beschrieben.

Und allgemein (wenn man nicht gerade mit `numpy`-Typen hantiert), macht man das, indem man direkt über die Sequenz iteriert (Zählschleifen sind in Python (und eigentlich allen anderen Sprachen der letzten 40 Jahre) ein Antipattern):

Code: Alles auswählen

def sum_rows(rows):
    result = []
    for row in rows:
        result.append(sum(row))
    return result
oder pythonischer, indem man das Erstellen der neuen Liste als List Comprehension formuliert:

Code: Alles auswählen

def sum_rows(rows):
    return [sum(row) for row in rows]
Benutzeravatar
__blackjack__
User
Beiträge: 14078
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ergänzend: Für den einfachen Fall, dass nur eine vorhandene Funktion auf die Elemente eines iterierbaren Objekts angewendet werden sollen, gäbe es dann noch diese Variante:

Code: Alles auswählen

def sum_rows(rows):
    return list(map(sum, rows))
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten