版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mochou111/article/details/84782851
背景介绍:三门问题:假设你参加一个电视游戏节目,节目现场有三扇门,其中一扇门后面是一辆车,另外两扇门后面则是山羊。主持人让你选择其中的一扇门。不妨假设你选择了一号门吧。主持人故意打开了另外一扇门,比如说三号门,让你看见三号门的后面是山羊。然后主持人问你,“你想改变你的选择,换成二号门吗?”这时候,你会怎么做?接下来我们通过numpy的介绍来解读这一问题选择
1.什么是Numpy
作为python三大基础包numpy,pandas,matplotlib之一的numpy,它提供了python对多维数据对象的支持:ndarray,具有矢量
运算能力。numpy支持高级大量的维度数组与矩阵运算,此外也针对数据运算提供大量的数据函数库
2.创建ndarray数组
ndarray:N维数组对象(矩阵),所有元素必须是相同类型
ndarray属性:ndim属性,表示维度个数;shape属性,表示各维度大小;dtype属性,表示数据类型
常用的函数
import numpy as np
# 把数组等变为ndarray
a = list(range(10))
b = np.array(a)
c = np.array([2,3,1])
d = np.array([[2],[3],[1]])
# numpy的一些常用函数
e = np.arange(10)
p = np.array([[1,2],[2,3]])
np.save('test.npy',p)
pp = np.load('test.npy')
f = np.sin(np.pi)
g = np.tan(np.pi/4)
j = np.ones((3,3),dtype=np.int)
3.numpy中的随机数
import numpy.random模块
扫描二维码关注公众号,回复:
4365872 查看本文章
常用的numpy.random模块函数:
4.ndarray数组的拆分与合并
函数整理:
5.三门问题的解答
# 三门问题
import numpy.random as random
def test():
#测试次数
n_test = 100000
winning_door = random.randint(0,3,n_test)
first_get = 0
change_get = 0
for winning_doors in winning_door:
act_door = random.randint(0,3)
if winning_doors == act_door:
first_get += 1
else :
change_get += 1
first_pro = first_get / n_test
change_pro = change_get / n_test
compar1 = round(change_get / first_get,2)
print ("在%d次测试中,坚持原则第一次就选中的次数是%d,改变决定选择另一扇门中奖的次数是%d"% (n_test,first_get,change_get))
print ("概率分别是{0}和{1},改变决定选择另一扇门中奖几率是坚持选择的{2}倍".format(first_pro,change_pro,compar1))
test()
最终输出结果是:
在100000次测试中,坚持原则第一次就选中的次数是33535,改变决定选择另一扇门中奖的次数是66465 概率分别是0.33535和0.66465,改变决定选择另一扇门中奖几率是坚持选择的1.98倍
所以如果在主持人开启上帝视角,他知道哪扇门是正确的时候,这个时候就需要果断换,因为你改变决定的中奖概率是不改的2倍