2013-10-21 23 views
6

0-1 aralığında bir dizi x sayısı verilen olasılık dağılımını gösteren bir histogramı nasıl oluşturabilirim? Her çubuğun < = 1 olmasını beklerim ve eğer her çubuğun y değerlerini toplarsam 1'e kadar eklerler.Python'da bir olasılık kütle işlevi çizimi nasıl yapılır

Örneğin, x = [.2, .2, .8] ise 2 çubuk gösteren bir grafik bekliyoruz. Biri .2, .66, biri .8, bir .38. Bana bunu normlu parametre belgelerine göre ne yapacağı beri bu yanlış demiyorum 1'in üstünde gitmek sütunlu histogram verir

matplotlib.pyplot.hist(x, bins=50, normed=True) 

, ama bu etmiyor:

denedim olasılıkları gösterme.

Ben de denedim:

counts, bins = numpy.histogram(x, bins=50, density=True) 
bins = bins[:-1] + (bins[1] - bins[0])/2 
matplotlib.pyplot.bar(bins, counts, 1.0/50) 

da beni barlar kimin y 1'den büyük

cevap

3

Özgün terminolojimin kapalı olduğunu düşünüyorum. Bir olasılık kütle fonksiyonunu çizmek için ayrılmak ve kullanmak istediğim bir dizi sürekli değer [0-1] var. Bunu yapmak için tek bir yöntem gerektirecek kadar ortak olabileceğini düşündüm.

İşte kod:

x = [random.random() for r in xrange(1000)] 
num_bins = 50 
counts, bins = np.histogram(x, bins=num_bins) 
bins = bins[:-1] + (bins[1] - bins[0])/2 
probs = counts/float(counts.sum()) 
print probs.sum() # 1.0 
plt.bar(bins, probs, 1.0/num_bins) 
plt.show() 
+1

Bu bölümün neden gerekli olduğunu açıklayabilir misiniz? bidonlar = bidonlar [: - 1] + (bidonlar [1] - bidonlar [0])/2 – user3314418

3

için toplamı değerleri senin bir ayrılmaz için toplamını karıştırıyorsun düşünüyorum veren. Uygun bir PRF (olasılık dağılımı fonksiyonu) birliğe entegre olur; Eğer toplamı alırsanız, dikdörtgenin boyutunda eksik olabilirsiniz.

import numpy as np 
import pylab as plt 

N = 10**5 
X = np.random.normal(size=N) 

counts, bins = np.histogram(X,bins=50, density=True) 
bins = bins[:-1] + (bins[1] - bins[0])/2 

print np.trapz(counts, bins) 

birlik yeterince yakın olan .999985 verir.

DÜZENLEME: Bu yorum yanıt olarak:

ise X = ve iki bar, .2 az bir olan bir grafik arıyorum [2, .2, .8.] .66 ile, değerlerin% 66'sı .2 ve yüksekliği 0,33 olan bir çubukta .33, bu grafik ne çağrılacak ve nasıl üreteceğim?

Aşağıdaki kod:

from collections import Counter 
x = [.2,.2,.8] 
C = Counter(x) 
total = float(sum(C.values())) 
for key in C: C[key] /= total 

bir "sözlük" C=Counter({0.2: 0.666666, 0.8: 0.333333}) verir. Buradan bir çubuk grafik oluşturabiliriz, ancak bu yalnızca PDF ayrık ise işe yarar ve sadece birbirinden iyi ayrılmış sabit bir değerler kümesini alır.

+0

Belki de benim terminoloji kapalıdır. X = [.2, .2, .8] ve iki çubuklu bir grafik arıyoruz. Biri .2 ile .66. Çünkü değerlerin% 66'sı .2 ve bir çubuk ise 8'dir. .33, bu grafik ne çağrılacak ve nasıl üreteceğim? – kmosley

+0

Verilerinizin kaynağı nedir? Sürekli bir sinyalden mi geliyor yoksa ayrı olaylar mı var? – Hooked

+0

Çubuk grafiğine bakabileceğim ve ".2 değerlerinin yaklaşık kabaca% x'inin meydana geldiği" diyebileceğim şekilde, ayırmak istediğim sürekli bir sinyaldir. – kmosley

İlgili konular