python/C 生成beta分布的随机数

python/C 生成beta分布的随机数


文章目录

  • python/C 生成beta分布的随机数
  • 前言
  • 一、beta分布理论知识
  • 二、python 生成服从beta分布的随机数
  • 三、C语言生成服从beta分布的随机数


前言

想把一个算法用C语言实现,其中涉及到了beta分布取随机数,记录一下结果


一、beta分布理论知识

参考博客:
Beta分布及其应用

Beta分布是一个定义在[0,1]区间上的连续概率分布族,它有两个正值参数,称为形状参数,一般用α和β表示。在贝叶斯推断中,Beta分布是Bernoulli、二项分布、负二项分布和几何分布的共轭先验分布。Beta分布的概率密度函数形式如下:

  • 定义域:[0,1]
  • 参数:α , β 均为正值参数,又称为形状参数

Beta分布的概率密度函数:
在这里插入图片描述
其中, Γ ( x ) \Gamma(x) Γ(x)为gamma函数, B ( α , β ) B(\alpha,\beta) B(α,β)为beta函数,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • Beta分布的均值
    α α + β \frac{\alpha}{\alpha+\beta} α+βα

  • Beta分布的方差
    α β ( α + β ) 2 ( α + β + 1 ) \frac{\alpha\beta}{(\alpha+\beta)^2(\alpha+\beta+1)} (α+β)2(α+β+1)αβ

  • Beta分布的图形
    在这里插入图片描述

从Beta分布的概率密度函数的图形我们可以看出,Beta分布有很多种形状,但都是在0-1区间内,因此Beta分布可以描述各种0-1区间内的形状(事件)。因此,它特别适合为某件事发生或者成功的概率建模。同时,当α=1,β=1的时候,它就是一个均匀分布。
beta分布主要有 α和 β两个参数,这两个参数决定了分布的形状,从上图及其均值和方差的公式可以看出:
1)α/(α+β)也就是均值,其越大,概率密度分布的中心位置越靠近1,依据此概率分布产生的随机数也多说都靠近1,反之则都靠近0。
2)α+β越大,则分布越窄,也就是集中度越高,这样产生的随机数更接近中心位置,从方差公式上也能看出来。


二、python 生成服从beta分布的随机数

参考文章

一个满足beta分布的随机变量可以被两个服从Gamma分布的独立随机变量X,Y推导得到:
在这里插入图片描述
在这里插入图片描述

P.S. python是有相应的库函数可以用来生成beta分布随机数,scipy.stats.beta,下面的代码是通过数值近似从均匀分布随机数给出beta分布随机数的代码

    def do_Beta_Universality_Uniform(self)->np.ndarray:
        """
        Creates an array with samples from the desired beta(a,b) distribution.

        Returns
        -------
        beta_rv : numpy.ndarray
            an array with samples from the desired beta(a,b) distribution.

        """
        # 1) Create "a" and "b" many Expos by drawing n samples
        # from the Uniform distr. and plugging them into F^(1) of the
        #Expo (-log(1-U))
        n = self.number_of_simulations
        X = []
        for i in np.arange(self.a): #number 3 of plan of attack
            uniform_samples = uniform().rvs(size=n) #number 1 and 2 of plan of attack
            X.append((-1*np.log(1-uniform_samples)))
        Y = []
        for i in np.arange(self.b): #number 4 of plan of attack
            uniform_samples = uniform(0, 1).rvs(size=n) #number 1 and 2 of plan of attack
            Y.append(-1*np.log(1-uniform_samples))

        #5 of plan of attack - create Gamma(a,1) from Expos by summing all      
        #the a uniforms samples
        X = np.array(X)
        X = X.sum(axis=0)
        
        #6 of plan of attack - create Gamma(b,1) from Expos by summing all  
        #the b uniform samples
        Y = np.array(Y)
        Y = Y.sum(axis=0)

        #7 of plan of attack -the final Beta r.v. is X/(X+Y)
        beta_rv = X/(X+Y)

        return beta_rv

三、C语言生成服从beta分布的随机数

算法是一样的,只不过C语言没有生成均匀分布的随机数的库函数,需要从rand()(生成正态分布随机数)出发:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

/* 
	函数功能:	产生(0,1)区间上均匀分布的随机数
	输入参数说明:
		0		给定区间的下限
		1		给定区间的上线
		seed	长整型指针变量, *seed 为伪随机数的种子
*/
double uniform_data(long int * seed)
{
	double t;
	*seed = 2045.0 * (*seed) + 1;
	*seed = *seed - (*seed / 1048576) * 1048576;
	t = (*seed) / 1048576.0;
	return t;
}

// 生成贝塔分布随机数
double rand_beta_dist(double alpha, double beta, long int* s) {

    // 生成服从 [0, 1] 均匀分布的随机数
    double x=0,y=0;
    double tmp1=0;
    for(int i=0; i<alpha; i++)
    {
        tmp1 = uniform_data(s);
        // printf("%f\n", tmp1);
        x = x + (-log(1-tmp1));
    }
    double tmp2=0;
    for(int i=0; i<beta; i++)
    {
        tmp2 = uniform_data(s);
        // printf("%f\n", tmp2);
        y = y + (-log(1-tmp1));
    }
    // 生成贝塔分布随机数
    return x / (x + y);
}




int main() {
    srand((unsigned int)time(NULL));

    double alpha = 2.0;  // 根据需要更改
    double beta = 200.0;   // 根据需要更改

	long int s;
    s = 1000;
    printf("%f\n", log(10));
    for (int i = 0; i < 10; ++i) {
        double sample = rand_beta_dist(alpha, beta, &s);
        printf("%f\n", sample);
    }

    return 0;
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/263211.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java】网络编程-TCP回显服务器代码编写

前面我们讲了基于UDP的网络编程 UDP回显服务器 UDP字典服务器 下面我们来讲基于TCP的回显服务编写 1、服务器 import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; impo…

25、新加坡南洋理工、新加坡国立大学提出FBCNet:完美融合FBCSP的CNN,EEG解码SOTA水准![抱歉老师,我太想进步了!]

前言&#xff1a; 阴阳差错&#xff0c;因工作需要&#xff0c;需要查阅有关如何将FBCSP融入CNN中的文献&#xff0c;查阅全网&#xff0c;发现只此一篇文章&#xff0c;心中大喜&#xff0c;心想作者哪家单位&#xff0c;读之&#xff0c;原来是自己大导&#xff08;新加坡工…

冬天天冷早安问候语关心话,愿我的每句话都能带给你温馨

1、送你一声问候&#xff0c;为你驱走冬日严寒&#xff0c;送你一份关怀&#xff0c;为你增添丝丝温暖&#xff0c;送你一句祝福&#xff0c;为你驱走所有不快&#xff0c;送你一份关爱&#xff0c;为你增添幸福无限&#xff0c;天虽寒了&#xff0c;我的关心犹在&#xff0c;愿…

Centos安装Docker及使用

文章目录 配置要求Centos安装Docker卸载docker&#xff08;可选&#xff09;安装docker首先需要大家虚拟机联网&#xff0c;安装yum工具然后更新本地镜像源&#xff1a;然后输入安装docker命令&#xff1a;查看docker的版本 启动docker关闭防火墙接着通过命令启动docker 配置镜…

vscode debug c++代码

需要提前写好CMakeLists.txt 在tasks.json中写好编译的步骤&#xff0c;即tasks&#xff0c;如cmake … 和make -j 在lauch.json中配置可执行文件的路径和需要执行tasks中的哪一个任务 具体步骤&#xff1a; 1.写好c代码和CMakeLists.txt 2.配置tasks.json 终端–>配置任务…

竞赛保研 基于CNN实现谣言检测 - python 深度学习 机器学习

文章目录 1 前言1.1 背景 2 数据集3 实现过程4 CNN网络实现5 模型训练部分6 模型评估7 预测结果8 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于CNN实现谣言检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&am…

Jmeter测试时遇到的各种乱码问题及解决

在Jmeter中显示乱码 遇到的问题&#xff1a;csv文件中有的用户名是中文的&#xff0c;接口使用该用户名入参时&#xff0c;查看结果树中看到&#xff0c;中文名显示为一堆乱码。 解决的方法&#xff1a; 应该是文件编码与jmeter编码不一致导致的。 1&#xff09;新建一个tx…

使用Python从图像中提取表格

有什么作用? 与深度学习解决方案相比,这个轻量级的包不需要训练和最小化参数化。它提供了以下功能: 识别图像和PDF文件中的表格,包括在表格单元级别的边界框。 通过支持OCR服务/工具(Tesseract、PaddleOCR、AWS Textract、Google Vision和Azure OCR目前支持)来提取表格内…

Grafana安装zabbix插件

文章目录 一、在线安装zabbix插件二、离线安装1.下载安装2.grafana配置zabbix数据源 一、在线安装zabbix插件 如果grafana服务器可以联网即可在线安装。 安装方法官网上有&#xff1a;官网链接联网安装比较慢。 二、离线安装 1.下载安装 官网下载链接 [rootnode1 src]# mo…

抖店怎么运营?走通流程是关键!

我是电商珠珠 很多新手在入驻抖店的时候&#xff0c;都不知道前期怎么去运营。 运营的技巧很多&#xff0c;牵扯到很多细节&#xff0c;跑通流程是关键。 所以&#xff0c;今天就来给大家讲讲抖店的几个基本流程&#xff0c;只有将流程跑通了才能去更快的抠细节上的东西。 …

算法题系列6·删除有序数组中的重复项

目录 题目描述 思路分析 实现 题目描述 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 …

解决:AD原理图网络无法更新同步到PCB

问题&#xff1a;表面上看起来引脚号都是一一对应的&#xff0c;但是Update过去就是无法同步。 解决&#xff1a; 检查并修改 元件管脚列 与 Name列 是否一一对应&#xff1a; 检查封装管脚模型匹配&#xff1a;

基于ssm高校实验室信息化综合管理平台建设系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本高校实验室信息化综合管理就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的…

【快速解决】python数据可视化时候无法显示中文字符的问题/图表中无法显示中文字符

目录 问题展示 解决方法 运行效果展示 问题展示 解决方法 加入以下代码即可 import matplotlib.pyplot as pltplt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False运行效果展示 成功运行出来 &#x1f30c;点击下方个人名片&#xff0c;交流会…

K8s攻击案例:Privileged特权容器导致节点沦陷

01、概述 特权容器&#xff08;Privileged Container&#xff09;是一种比较特殊的容器&#xff0c;在K8s中运行特权容器&#xff0c;需要将 Privileged 设为 true &#xff0c;容器可以执行几乎所有可以直接在主机上执行的操作。 基于此&#xff0c;利用容器的特权配置可以获取…

flutter开发实战-第一帧布局完成回调实现

flutter开发实战-第一帧布局完成回调实现 在开发中&#xff0c;我们有时候需要在第一帧布局完成后调用一些相关的方法。这里记录一下是实现过程。 Flutter中有多种不同的Binding&#xff0c;每种Binding都负责不同的功能。下面是Flutter中常见的Binding&#xff1a; 这里简单…

【权威认证】飞凌嵌入式FET113i-S核心板国产化率达100%

经中国赛宝实验室的严格认证&#xff0c;飞凌嵌入式FET113i-S核心板的电子元器件国产化率达100%——这款超高性价比的全国产核心板为新基建领域的国产化替代升级注入了新动力。 关于【中国赛宝实验室】 中国电子产品可靠性与环境试验研究所&#xff08;工业和信息化部电子第五研…

STM32 AI 模型测试

PC仿真软件测试 我在STM32单片机上跑神经网络算法—CUBE-AI_stm32cube.ai-CSDN博客 仿真软件测试结果和真实情况差距过大 云平台测试 Home - STM32Cube.AI Developer Cloud 上传模型文件 点击Start 选择优化方式 可以跳过量化步骤&#xff0c;到Benchmark 选择合适的型号&a…

配置OSPF多区域,实现内网互通---实验

目录 配置OSPF多区域&#xff0c;实现内网互通---实验 拓扑 需求&#xff1a; 配置步骤&#xff1a; 配置命令&#xff1a; 配置OSPF多区域&#xff0c;实现内网互通---实验 拓扑 需求&#xff1a; 1&#xff09;实现内网所有vlan和R1互通 2&#xff09;实现R1和SW5/SW6…

java开发面试:常见业务场景之单点登录SSO(JWT)、权限认证、上传数据的安全性的控制、项目中遇到的问题、日志采集(ELK)、快速定位系统的瓶颈

单点登录&#xff08;SSO&#xff09; 单点登录&#xff0c;Single Sign On&#xff08;简称SSO&#xff09;,只需要登录一次&#xff0c;就可以访问所有信任的应用系统。 如果是单个tomcat服务&#xff0c;session可以共享&#xff0c;如果是多个tomcat&#xff0c;那么服务s…