Gaussche Summenkurve aus Liste / Array

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
Benutzeravatar
Natrix natrix
User
Beiträge: 16
Registriert: Mittwoch 29. März 2017, 09:16

Hallo allerseits,

habe eine Frage, die für die Profis sicher eine Kleinigkeit ist, die ich aber gerade nicht lösen kann:

Ich habe eine Liste von Zahlen (int/float), insg. z.B. 500 Werte von 0 bis 100. Für diese Liste möchte ich eine Gaussche Summenkurve darstellen, die zeigt wie viele Werte zwishcen 0 und 1, zwischen 0 und 2, zwischen 0 und 3... liegen.

So in etwa wie ein Histogramm, bei dem die Werte von links nach rechts aufaddiert werden.

Vielen Dank für Vorschläge!
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Natrix natrix: was für Gedanken hast Du Dir denn dazu schon gemacht? Kennst Du for-Schleifen und if-Abfragen? Mehr Wissen ist nicht nötig, um die Aufgabe zu lösen.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Ich würde da zunächst das Histogram mit numpy.histogram berechnen
und danach in einer Schleife über das Histogramm in ein zweites Array aufsummieren.
a fool with a tool is still a fool, www.magben.de, YouTube
BlackJack

@MagBen: Warum in einer Schleife? Wenn man eh schon Numpy verwendet, sollte man das dann auch gleich Numpy machen lassen: `cumsum()`.
Benutzeravatar
Natrix natrix
User
Beiträge: 16
Registriert: Mittwoch 29. März 2017, 09:16

Hallo,

danke für Eure Antworten. Da hätte ich wohl ein bisschen spezifischer werden sollen. :oops:
Klar kann man das mit der for-Schleife machen, sieht dann so aus - für 500 Zahlen machbar, für längere Zahlenreihen laaaangsam:

Code: Alles auswählen

# x1 ist hier als Beispiel ein np array mit 500 ints zwischen 1 und 100  

bins = 100                                           # Anzahl der bins entsprechend den möglichen Zahlenwerten
x2 = np.zeros(bins+1)

for i in range(0,len(x1)):
    y= x1[i]
    x2[y]+=1

for i in range(0,len(x2)):
    if i > 0:
        x2[i] = x2[i] + x2[i-1]
Die Vorgehensweise erscheint mit aber recht umständlich und ich hatte auf eine Standard-Funktion gehofft. An cumsum() hatte ich auch gedacht, aber die Funktion addiert die Werte auf und nicht die Anzahl der Werte.

Danke und Grüße

P.S. die Einrückung geht verloren...
Zuletzt geändert von Anonymous am Mittwoch 29. März 2017, 16:45, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@Natrix natrix: Was gefällt Dir denn nicht an `histogram`? Und `cumsum` für den zweiten Teil?
Benutzeravatar
Natrix natrix
User
Beiträge: 16
Registriert: Mittwoch 29. März 2017, 09:16

Bei näherem Nachdenken... gefällt mir schon :D,

bin erst noch über das Tupel vom Histogramm gestolpert...

x2 = np.cumsum(np.histogram(x1)[0])

War wohl nen Brett vorm Kopf, Danke fürs zersägen
Antworten