学过概率论的相信对于正态分布都不会陌生,这个可以说是非常经典非常重要的一种概率分布了,在现实生活中也是广泛在使用的,比如说:男女的升高服从正态分布,灯泡的寿命服从正态分布,某地区的降雨量服从正态分布,诸如此类的实例还有很多,可以说我们生活中的很多场景都符合或者近似符合于正态分布。
记得上学的时候,求解指定区间内的概率如下:
往往都是转化为标准正态分布,之后借助于已经做好的表格来实现概率求解的。
上面的求解方式能够满足很多需要,但是不能做很精细化的处理,这里先贴出来正态分布表格数据,如下:
Z 0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.090.0 0.0000 0.0040 0.0080 0.0120 0.0160 0.0199 0.0239 0.0279 0.0319 0.03590.1 0.0398 0.0438 0.0478 0.0517 0.0557 0.0596 0.0636 0.0675 0.0714 0.07530.2 0.0793 0.0832 0.0871 0.0910 0.0948 0.0987 0.1026 0.1064 0.1103 0.11410.3 0.1179 0.1217 0.1255 0.1293 0.1331 0.1368 0.1406 0.1443 0.1480 0.15170.4 0.1554 0.1591 0.1628 0.1664 0.1700 0.1736 0.1772 0.1808 0.1844 0.18790.5 0.1915 0.1950 0.1985 0. 0.2054 0.2088 0.2123 0.2157 0.2190 0.22240.6 0.2257 0.2291 0.2324 0.2357 0.2389 0.2422 0.2454 0.2486 0.2517 0.25490.7 0.2580 0.2611 0.2642 0.2673 0.2704 0.2734 0.2764 0.2794 0.2823 0.28520.8 0.2881 0.2910 0.2939 0.2967 0.2995 0.3023 0.3051 0.3078 0.3106 0.31330.9 0.3159 0.3186 0.3212 0.3238 0.3264 0.3289 0.3315 0.3340 0.3365 0.33891.0 0.3413 0.3438 0.3461 0.3485 0.3508 0.3531 0.3554 0.3577 0.3599 0.36211.1 0.3643 0.3665 0.3686 0.3708 0.3729 0.3749 0.3770 0.3790 0.3810 0.38301.2 0.3849 0.3869 0.3888 0.3907 0.3925 0.3944 0.3962 0.3980 0.3997 0.40151.3 0.4032 0.4049 0.4066 0.4082 0.4099 0.4115 0.4131 0.4147 0.4162 0.41771.4 0.4192 0.4207 0.4222 0.4236 0.4251 0.4265 0.4279 0.4292 0.4306 0.43191.5 0.4332 0.4345 0.4357 0.4370 0.4382 0.4394 0.4406 0.4418 0.4429 0.44411.6 0.4452 0.4463 0.4474 0.4484 0.4495 0.4505 0.4515 0.4525 0.4535 0.45451.7 0.4554 0.4564 0.4573 0.4582 0.4591 0.4599 0.4608 0.4616 0.4625 0.46331.8 0.4641 0.4649 0.4656 0.4664 0.4671 0.4678 0.4686 0.4693 0.4699 0.47061.9 0.4713 0.4719 0.4726 0.4732 0.4738 0.4744 0.4750 0.4756 0.4761 0.47672.0 0.4772 0.4778 0.4783 0.4788 0.4793 0.4798 0.4803 0.4808 0.4812 0.48172.1 0.4821 0.4826 0.4830 0.4834 0.4838 0.4842 0.4846 0.4850 0.4854 0.48572.2 0.4861 0.4864 0.4868 0.4871 0.4875 0.4878 0.4881 0.4884 0.4887 0.48902.3 0.4893 0.4896 0.4898 0.4901 0.4904 0.4906 0.4909 0.4911 0.4913 0.49162.4 0.4918 0.4920 0.4922 0.4925 0.4927 0.4929 0.4931 0.4932 0.4934 0.49362.5 0.4938 0.4940 0.4941 0.4943 0.4945 0.4946 0.4948 0.4949 0.4951 0.49522.6 0.4953 0.4955 0.4956 0.4957 0.4959 0.4960 0.4961 0.4962 0.4963 0.49642.7 0.4965 0.4966 0.4967 0.4968 0.4969 0.4970 0.4971 0.4972 0.4973 0.49742.8 0.4974 0.4975 0.4976 0.4977 0.4977 0.4978 0.4979 0.4979 0.4980 0.49812.9 0.4981 0.4982 0.4982 0.4983 0.4984 0.4984 0.4985 0.4985 0.4986 0.49863.0 0.4987 0.4987 0.4987 0.4988 0.4988 0.4989 0.4989 0.4989 0.4990 0.4990
这是我专门整理过的,可以直接复制使用的。
今天在网上看到了一个非常好玩的标准正态分布表,如下:
借助于鼠标的左右移动就可以求解三种形式的正态分布区间概览,着实很方便,既然方便那么我就要拿下来,页面是基于js做的,我基于Python实现了计算模块的功能,具体实现如下:
#!usr/bin/env python# encoding:utf-8from __future__ import division'''__Author__:沂水寒城功能: 正态分布区间概率值计算'''import mathdef normalcdf(X):'''计算正态分布的累积分布函数(Cumulative Distribution Function,CDF)'''T=1/(1+.2316419*abs(X))D=0.3989423*math.exp(-X*X/2)Prob=D*T*(0.3193815+T*(-0.3565638+T*(1.781478+T*(-1.821256+T*1.330274))))if X>0:return 1-Probelse:return Probdef zoneProbality(zVal,flag='0-z'):'''计算指定区间内的正态分布概率值'''if flag=='0-z':if zVal==0:return 0else:return abs(normalcdf(zVal)-0.5)elif flag=='inf-z':if zVal==0:return 0.5else:return normalcdf(zVal)elif flag=='z-inf':if zVal==0:return 0.5else:return 1-normalcdf(zVal)else:return Nonedef low2upProbality(L=-1.2,U=2.3):'''计算给定Z值区间的概率值'''small=zoneProbality(L,flag='inf-z')big=zoneProbality(U,flag='inf-z')return big-smallif __name__=='__main__':print zoneProbality(1.97,flag='0-z') #0.47558088818print zoneProbality(-1.01,flag='0-z') #0.343752376611print zoneProbality(1.97,flag='inf-z') #0.97558088818print zoneProbality(-1.01,flag='inf-z') #0.156247623389print zoneProbality(1.97,flag='z-inf') #0.0244191118198print zoneProbality(-1.01,flag='z-inf') #0.843752376611print low2upProbality(L=-1.01,U=1.97) #0.819333264791
测试样例以及结果输出我都放在源代码中了,可以对比一下。
相比于原始页面的三种计算方式,我这里做了一层扩展就是可以直接计算某一值落在给定的上下边界区间中的概率,这个功能相信会是经常使用到的。