如何在 python 中绘制六面骰子模拟的累积分布函数?
How to plot cumulative distribution function in python for six sided dice simulation?
我正在尝试
- 根据模拟的骰子总和结果的频率绘制直方图。
- 计算并绘制累积分布函数。
- 查找并绘制中位数。
到目前为止,这是我所拥有的:
import pylab
import random
sampleSize = 100
## Let's simulate the repeated throwing of a single six-sided die
singleDie = []
for i in range(sampleSize):
newValue = random.randint(1,6)
singleDie.append(newValue)
print "Results for throwing a single die", sampleSize, "times."
print "Mean of the sample =", pylab.mean(singleDie)
print "Median of the sample =", pylab.median(singleDie)
#print "Standard deviation of the sample =", pylab.std(singleDie)
print
print
pylab.hist(singleDie, bins=[0.5,1.5,2.5,3.5,4.5,5.5,6.5] )
pylab.xlabel('Value')
pylab.ylabel('Count')
pylab.savefig('singleDie.png')
pylab.show()
## What about repeatedly throwing two dice and summing them?
twoDice = []
for i in range(sampleSize):
newValue = random.randint(1,6) + random.randint(1,6)
twoDice.append(newValue)
print "Results for throwing two dices", sampleSize, "times."
print "Mean of the sample =", pylab.mean(twoDice)
print "Median of the sample =", pylab.median(twoDice)
#print "Standard deviation of the sample =", pylab.std(twoDice)
pylab.hist(twoDice, bins= pylab.arange(1.5,12.6,1.0))
pylab.xlabel('Value')
pylab.ylabel('Count')
pylab.savefig('twoDice.png')
pylab.show()
谁能帮我画cdf?
您可以直接使用直方图绘制功能来实现,例如
import pylab
import random
import numpy as np
sampleSize = 100
## Let's simulate the repeated throwing of a single six-sided die
singleDie = []
for i in range(sampleSize):
newValue = random.randint(1,6)
singleDie.append(newValue)
print "Results for throwing a single die", sampleSize, "times."
print "Mean of the sample =", pylab.mean(singleDie)
print "Median of the sample =", pylab.median(singleDie)
print "Standard deviation of the sample =", pylab.std(singleDie)
pylab.hist(singleDie, bins=[0.5,1.5,2.5,3.5,4.5,5.5,6.5] )
pylab.xlabel('Value')
pylab.ylabel('Count')
pylab.savefig('singleDie.png')
pylab.show()
## What about repeatedly throwing two dice and summing them?
twoDice = []
for i in range(sampleSize):
newValue = random.randint(1,6) + random.randint(1,6)
twoDice.append(newValue)
print "Results for throwing two dices", sampleSize, "times."
print "Mean of the sample =", pylab.mean(twoDice)
print "Median of the sample =", pylab.median(twoDice)
#print "Standard deviation of the sample =", pylab.std(twoDice)
pylab.hist(twoDice, bins= pylab.arange(1.5,12.6,1.0))
pylab.xlabel('Value')
pylab.ylabel('Count')
pylab.savefig('twoDice.png')
pylab.show()
pylab.hist(twoDice, bins=pylab.arange(1.5,12.6,1.0), normed=1, histtype='step', cumulative=True)
pylab.xlabel('Value')
pylab.ylabel('Fraction')
pylab.show()
注意新行:
pylab.hist(twoDice, bins=pylab.arange(1.5,12.6,1.0), normed=1, histtype='step', cumulative=True)
应该直接给出cdf图。如果您不指定 normed=1,您将看到表示百分比的比例 (0-100),而不是通常的概率比例 (0-1)。
还有其他方法可以做到。例如:
import pylab
import random
import numpy as np
sampleSize = 100
## Let's simulate the repeated throwing of a single six-sided die
singleDie = []
for i in range(sampleSize):
newValue = random.randint(1,6)
singleDie.append(newValue)
print "Results for throwing a single die", sampleSize, "times."
print "Mean of the sample =", pylab.mean(singleDie)
print "Median of the sample =", pylab.median(singleDie)
print "Standard deviation of the sample =", pylab.std(singleDie)
pylab.hist(singleDie, bins=[0.5,1.5,2.5,3.5,4.5,5.5,6.5] )
pylab.xlabel('Value')
pylab.ylabel('Count')
pylab.savefig('singleDie.png')
pylab.show()
## What about repeatedly throwing two dice and summing them?
twoDice = []
for i in range(sampleSize):
newValue = random.randint(1,6) + random.randint(1,6)
twoDice.append(newValue)
print "Results for throwing two dices", sampleSize, "times."
print "Mean of the sample =", pylab.mean(twoDice)
print "Median of the sample =", pylab.median(twoDice)
#print "Standard deviation of the sample =", pylab.std(twoDice)
pylab.hist(twoDice, bins= pylab.arange(1.5,12.6,1.0))
pylab.xlabel('Value')
pylab.ylabel('Count')
pylab.savefig('twoDice.png')
pylab.show()
twod_cdf = np.array(twoDice)
X_values = np.sort(twod_cdf)
F_values = np.array(range(sampleSize))/float(sampleSize)
pylab.plot(X_values, F_values)
pylab.xlabel('Value')
pylab.ylabel('Fraction')
pylab.show()
注意现在我们对数组进行排序,构建函数并绘制它。
我正在尝试
- 根据模拟的骰子总和结果的频率绘制直方图。
- 计算并绘制累积分布函数。
- 查找并绘制中位数。
到目前为止,这是我所拥有的:
import pylab
import random
sampleSize = 100
## Let's simulate the repeated throwing of a single six-sided die
singleDie = []
for i in range(sampleSize):
newValue = random.randint(1,6)
singleDie.append(newValue)
print "Results for throwing a single die", sampleSize, "times."
print "Mean of the sample =", pylab.mean(singleDie)
print "Median of the sample =", pylab.median(singleDie)
#print "Standard deviation of the sample =", pylab.std(singleDie)
print
print
pylab.hist(singleDie, bins=[0.5,1.5,2.5,3.5,4.5,5.5,6.5] )
pylab.xlabel('Value')
pylab.ylabel('Count')
pylab.savefig('singleDie.png')
pylab.show()
## What about repeatedly throwing two dice and summing them?
twoDice = []
for i in range(sampleSize):
newValue = random.randint(1,6) + random.randint(1,6)
twoDice.append(newValue)
print "Results for throwing two dices", sampleSize, "times."
print "Mean of the sample =", pylab.mean(twoDice)
print "Median of the sample =", pylab.median(twoDice)
#print "Standard deviation of the sample =", pylab.std(twoDice)
pylab.hist(twoDice, bins= pylab.arange(1.5,12.6,1.0))
pylab.xlabel('Value')
pylab.ylabel('Count')
pylab.savefig('twoDice.png')
pylab.show()
谁能帮我画cdf?
您可以直接使用直方图绘制功能来实现,例如
import pylab
import random
import numpy as np
sampleSize = 100
## Let's simulate the repeated throwing of a single six-sided die
singleDie = []
for i in range(sampleSize):
newValue = random.randint(1,6)
singleDie.append(newValue)
print "Results for throwing a single die", sampleSize, "times."
print "Mean of the sample =", pylab.mean(singleDie)
print "Median of the sample =", pylab.median(singleDie)
print "Standard deviation of the sample =", pylab.std(singleDie)
pylab.hist(singleDie, bins=[0.5,1.5,2.5,3.5,4.5,5.5,6.5] )
pylab.xlabel('Value')
pylab.ylabel('Count')
pylab.savefig('singleDie.png')
pylab.show()
## What about repeatedly throwing two dice and summing them?
twoDice = []
for i in range(sampleSize):
newValue = random.randint(1,6) + random.randint(1,6)
twoDice.append(newValue)
print "Results for throwing two dices", sampleSize, "times."
print "Mean of the sample =", pylab.mean(twoDice)
print "Median of the sample =", pylab.median(twoDice)
#print "Standard deviation of the sample =", pylab.std(twoDice)
pylab.hist(twoDice, bins= pylab.arange(1.5,12.6,1.0))
pylab.xlabel('Value')
pylab.ylabel('Count')
pylab.savefig('twoDice.png')
pylab.show()
pylab.hist(twoDice, bins=pylab.arange(1.5,12.6,1.0), normed=1, histtype='step', cumulative=True)
pylab.xlabel('Value')
pylab.ylabel('Fraction')
pylab.show()
注意新行:
pylab.hist(twoDice, bins=pylab.arange(1.5,12.6,1.0), normed=1, histtype='step', cumulative=True)
应该直接给出cdf图。如果您不指定 normed=1,您将看到表示百分比的比例 (0-100),而不是通常的概率比例 (0-1)。
还有其他方法可以做到。例如:
import pylab
import random
import numpy as np
sampleSize = 100
## Let's simulate the repeated throwing of a single six-sided die
singleDie = []
for i in range(sampleSize):
newValue = random.randint(1,6)
singleDie.append(newValue)
print "Results for throwing a single die", sampleSize, "times."
print "Mean of the sample =", pylab.mean(singleDie)
print "Median of the sample =", pylab.median(singleDie)
print "Standard deviation of the sample =", pylab.std(singleDie)
pylab.hist(singleDie, bins=[0.5,1.5,2.5,3.5,4.5,5.5,6.5] )
pylab.xlabel('Value')
pylab.ylabel('Count')
pylab.savefig('singleDie.png')
pylab.show()
## What about repeatedly throwing two dice and summing them?
twoDice = []
for i in range(sampleSize):
newValue = random.randint(1,6) + random.randint(1,6)
twoDice.append(newValue)
print "Results for throwing two dices", sampleSize, "times."
print "Mean of the sample =", pylab.mean(twoDice)
print "Median of the sample =", pylab.median(twoDice)
#print "Standard deviation of the sample =", pylab.std(twoDice)
pylab.hist(twoDice, bins= pylab.arange(1.5,12.6,1.0))
pylab.xlabel('Value')
pylab.ylabel('Count')
pylab.savefig('twoDice.png')
pylab.show()
twod_cdf = np.array(twoDice)
X_values = np.sort(twod_cdf)
F_values = np.array(range(sampleSize))/float(sampleSize)
pylab.plot(X_values, F_values)
pylab.xlabel('Value')
pylab.ylabel('Fraction')
pylab.show()
注意现在我们对数组进行排序,构建函数并绘制它。