Das Problem ist im Quellcode der Methode plot() beschrieben:
Code: Alles auswählen
import numpy as np
from scipy.stats import lognorm
import matplotlib.pyplot as plt
# Eigene Klasse definieren, um die Parameter zu kapseln
class LogNormal:
def __init__(self, mu, sigma):
self.mu = mu
self.sigma = sigma
def pdf(self, x):
return lognorm.pdf(x, self.sigma, self.mu)
def cdf(self, x):
return lognorm.cdf(x, self.sigma, self.mu)
def ppf(self, p):
return lognorm.ppf(p, self.sigma, self.mu)
def data(self, intervals=100):
# Bestimmen der x-Werte
x = np.linspace(self.ppf(0.0001),
self.ppf(0.9999),
intervals)
# Bestimmen der PDF- wie auch CDF-Werte
y_pdf = self.pdf(x)
y_cdf = self.cdf(x)
# Alles in ein Array [x, pdf(x), cdf(x)] packen
d = []
for i in range(len(x)):
d.append([x[i], y_pdf[i], y_cdf[i]])
return d
def plot(self, intervals=100):
d = self.data(intervals)
# Hier müsste nun wieder aus d ein Arrays füx x, y_pdf und cdf_extrahiert werden
# Gibt es eine Methode in Python, der ich sagen kann
# x = d.Erstes_Element_Arrays
# y_pdf = d.Zweites_Element_Arrays
# y_cdf = d.Drittes_Element_Arrays
# Zeichnen des Graphen
plt.figure(1)
plt.subplot(211)
plt.grid(True)
plt.xlim(0, 3)
plt.plot(x, y_pdf, 'b-')
plt.subplot(212)
plt.grid(True)
plt.xlim(0, 3)
plt.plot(x, y_cdf, 'b-')
# Instanz der Klasse erzeugen
dist = LogNormal(mu=0.0, sigma=0.25)
dist.data()
dist.plot()
Generell bin ich auch mit der momentanen Codelogik nicht zufrieden. Erst ein Array d [x, y_pdf, y_cdf] aus seinen Bestandteilen erstellen, um es dann in einem anderen Teil des Codes wieder in die Bestandteile zu zerlegen. Ich dachte mir, dass die Methode data/b] alle daten kapseln sollte. Eventuell macht es auch mehr Sinn, drei Array zurückzugeben, eins für x, eins für y_pdf und eins für y-cdf. Bin für alle Vorschläge dankbar!