Seite 1 von 1

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

Verfasst: Mittwoch 27. April 2022, 12:12
von Pumpen_Heinrich
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

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

Verfasst: Mittwoch 27. April 2022, 13:38
von narpfel
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]

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

Verfasst: Mittwoch 27. April 2022, 13:48
von __blackjack__
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))