1

Ich habe die Aufgabe gegeben, die Normalverteilung N (2, 1) in der Intervall von [-1, 5]Python - Berechne und zeichne die theoretische Normalverteilung N (2, 1) im Intervall von [-1, 5]

Hier ist, was ich versucht habe:

vec = np.random.norm(2, 1, 7); 
ND = stats.norm(2, 1).pdf(vec) 
x = np.arange(1, 6, 1) 
plt.figure() 
plt.plot(x, 'r') 
plt.hist(ND) 
plt.show() 

Wie Sie dies herausgefunden haben kann aus das Ergebnis nicht geben Sie mir ich suche.

Ich kann nicht für das Leben von mir dies herausfinden. Bitte beachten Sie, dass ich ein Student bin, der erst seit kurzem in Python programmiert.

Ich wurde gebeten, Zufallszahlen mit np.random.normal zwischen -1 und 5 zu generieren. Allerdings muss ich noch verstehen, wie ich das tun kann, wenn man bedenkt, dass das Intervall bei -1 beginnt.

Zweitens wurde ich gebeten, die Funktion norm.pdf von scipy.stats zu verwenden, aber ich verstehe nicht, die Dokumentation zu dieser Funktion (https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.norm.html)

Schließlich muss ich die Ergebnisse grafisch darzustellen.

Ich werde jede Hilfe zu schätzen wissen. Bitte entschuldigen Sie meine Inkompetenz ...

+2

Willkommen bei SO. Leider ist dies kein Diskussionsforum oder Tutorial. Bitte nehmen Sie sich die Zeit, [ask] und die anderen Links auf dieser Seite zu lesen. – wwii

+0

@wwii Macht es Ihnen etwas aus, ein Forum vorzuschlagen, das mir zu diesem Thema helfen würde? – AlexT

+0

Wenn Sie versuchen, ein neues Tool zu verwenden, ist das Handbuch ein guter Anfang. Investieren Sie etwas Zeit in die Dokumentation und experimentieren Sie dabei. – wwii

Antwort

1

Um eine N (2,1) -Verteilung anzugeben bedeutet, dass Sie eine Normalverteilung mit Mittelwert 2 und Varianz (oder Standardabweichung) 1 wollen. In scipy ausgedrückt, entspricht Mittelwert Standort und Standardabweichung zu skalieren.

Um ein Diagramm der PDF mit Matplotlib zu erstellen, wählen Sie genügend Punkte im Intervall [-1, 5], um eine visuell glatte Grafik zu erhalten. Dies ist der Zweck von linspace. Für jeden dieser Punkte berechnen Sie sein pdf mit norm.pdf.

from scipy.stats import norm 
from matplotlib import pyplot as plt 
import numpy as np 

x = np.linspace(-1, 5, 100, endpoint=True) 
pdf = [norm.pdf(_, loc=2, scale=1) for _ in x] 

plt.plot(x, pdf, 'b-') 
plt.show() 

Hier erstelle ich eine Stichprobe der Größe 10. Ich weiß, dass norm.rvs weicht über die gesamte reale Linie produzieren; Um Abweichungen für das gewünschte Intervall zu erhalten, ignoriere ich einfach die außerhalb dieses Intervalls. Jeder Aufruf von `norm.rvs 'erzeugt ein numpiges' Array 'der Länge eins. Um ein schönes Ergebnis zu erhalten, wähle ich nur das erste Element in diesem Array und füge es an das gesamte Sample an (wenn es innerhalb des gewünschten Intervalls liegt).

sample_size = 10 
sample = [] 
while len(sample)<sample_size: 
    while True: 
     deviate = norm.rvs(loc=2, scale=1, size=1)[0] 
     if -1<=deviate<=5: 
      break 
    sample.append(deviate) 
print (sample) 
Verwandte Themen