Empirische Verteilungsfunktion ohne Schleifen
Verfasst: Dienstag 13. Oktober 2020, 17:52
Hallo zusammen. Ich benötige eine Funktion, die mir zu einem eindimensionalen Datensatz in Form eines Arrays die empirische Verteilungsfunktion wiedergibt.
Da das ganze auf große Datenmengen angewandt werden soll, möchte ich tunlichst auf lange Schleifen verzichten.
Eine Funktion, die mir einen einzelnen Wert der empirische Verteilungsfunktion zurückgibt, habe ich bereits ohne Schleife geschrieben:
Hiermit könnte man jetzt die einzelnen Werte der Verteilungsfunktion berechnen ... mal ein paar Beispielwerte:
Jetzt möchte ich aber einen Array, der die Werte der Verteilungsfunktion von allen Einträgen des Daten-Arrays enthält. Mit einer Schleife habe ich das wie folgt realisiert:
Hiermit erhalte ich mein gewünschtes Ergebnis:
Für große Datenmengen dauert dies allerdings viiiiiieeeel zu lange. Ich glaub auch, dass eine schnelle Lösung im Prinzip recht simpel sein müsste .... gerade frevel ich aber nur rum und hab ein Brett vorm Kopf.
Hoffe mir kann hier jemand weiterhelfen. Viele Grüße
Da das ganze auf große Datenmengen angewandt werden soll, möchte ich tunlichst auf lange Schleifen verzichten.
Eine Funktion, die mir einen einzelnen Wert der empirische Verteilungsfunktion zurückgibt, habe ich bereits ohne Schleife geschrieben:
Code: Alles auswählen
import numpy as np
def emp_Vfkt(x,x_data):
return len(x_data[x_data<=x])/len(x_data)
Code: Alles auswählen
data = np.array([1,2,2,2,3,3,4,5,6,7,7,7,7,7,7,8])
emp_Vfkt(1,data)
Out[161]: 0.0625
emp_Vfkt(2,data)
Out[162]: 0.25
emp_Vfkt(3,data)
Out[163]: 0.375
Code: Alles auswählen
import numpy as np
def emp_Vfkt(x):
y = []
for i in x:
y += [len(x[x<=i])/len(x)]
return np.array(y)
Code: Alles auswählen
data = np.array([1,2,2,2,3,3,4,5,6,7,7,7,7,7,7,8])
emp_Vfkt(data)
Out[172]:
array([0.0625, 0.25 , 0.25 , 0.25 , 0.375 , 0.375 , 0.4375, 0.5 ,
0.5625, 0.9375, 0.9375, 0.9375, 0.9375, 0.9375, 0.9375, 1. ])
Hoffe mir kann hier jemand weiterhelfen. Viele Grüße
