java实现加权抽样_用Java替换加权采样
Java或类似Apache MATLAB Commons function randsample的库(例如Apache Commons Math)中是否存在函数?
更具体地说,我想找到一个函数randSample,该函数根据我指定的概率分布返回一个独立且完全相同的随机变量的向量.
例如:
int[] a = randSample(new int[]{0, 1, 2}, 5, new double[]{0.2, 0.3, 0.5})
// { 0 w.p. 0.2
// a[i] = { 1 w.p. 0.3
// { 2 w.p. 0.5
输出与MATLAB代码randsample([0 1 2],5,true,[0.2 0.3 0.5])相同,其中true表示替换后的采样.
如果不存在这样的功能,该怎么写?
注意:我知道在堆栈溢出中已询问similar question,但不幸的是它尚未得到回答.
解决方法:
我敢肯定一个人不存在,但是创建一个可以产生这样的样本的函数很容易.首先,Java确实带有随机数生成器,特别是带有函数Random.nextDouble()的生成器,该函数可以生成0.0到1.0之间的随机双精度数.
import java.util.Random;
double someRandomDouble = Random.nextDouble();
// This will be a uniformly distributed
// random variable between 0.0 and 1.0.
如果您要进行替换采样,并且将输入的pdf转换为cdf,则可以使用Java提供的随机双精度数,通过查看CDf属于哪个部分来创建随机数据集.因此,首先您需要将pdf转换为cdf.
int [] randsample(int[] values, int numsamples,
boolean withReplacement, double [] pdf) {
if(withReplacement) {
double[] cdf = new double[pdf.length];
cdf[0] = pdf[0];
for(int i=1; i
cdf[i] = cdf[i-1] + pdf[i];
}
然后,您可以构建适当大小的整数数组来存储结果并开始查找随机结果:
int[] results = new int[numsamples];
for(int i=0; i
int currentPosition = 0;
while(randomValue > cdf[currentPosition] && currentPosition < cdf.length) {
currentPosition++; //Check the next one.
}
if(currentPosition < cdf.length) { //It worked!
results[i] = values[currentPosition];
} else { //It didn't work.. let's fail gracefully I guess.
results[i] = values[cdf.length-1];
// And assign it the last value.
}
}
//Now we're done and can return the results!
return results;
} else { //Without replacement.
throw new Exception("This is unimplemented!");
}
}
有一些错误检查(确保值数组和pdf数组的大小相同),以及一些其他功能,可以通过重载此功能以提供其他功能来实现,但希望这足以让您开始.干杯!
标签:random-sample,random,matlab,java
来源: https://codeday.me/bug/20191122/2058706.html
java实现加权抽样_用Java替换加权采样相关推荐
- java正则表达式 匹配()_学习Java正则表达式(匹配、替换、查找)
import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; public c ...
- java 字符串包_包java字符串
Java核心技术卷I基础知识3.6.3 不可变字符串 3.6.3 不可变字符串 String类没有提供用于修改字符串的方法.如果希望将greeting的内容修改为"Help!",不 ...
- bigint对应java什么类型_「JAVA」从格式化输出到扫描输入,深究Java正则表达式匹配之道
字符串是不可变的 字符串是不可变的,也就是说当字符串的内容发生改变的时候,会创建一个新的String对象:但是如果内容没有发生改变的时候,String类的方法会返回原字符串对象的引用. 而正则表达式往 ...
- java 进程运行时间_将Java类作为子进程运行
java 进程运行时间 我本周需要将Java类(而不是jar)作为子进程运行. 更确切地说,我想从测试内部产生一个新进程,而不是直接在测试内部(进程内)运行它. 我不认为这是幻想或复杂的事情. 但是, ...
- java web源代码_检测Java Web应用程序而无需修改其源代码
java web源代码 与其他系统进行交互时,大多数Java Web应用程序都使用标准Java接口. 诸如Web页面或REST服务器之类的基于HTTP的服务是使用接口javax.servlet.Ser ...
- java避免空指针异常_避免Java中的空指针异常
java避免空指针异常 空指针异常是Java中最常见,最烦人的异常. 在这篇文章中,我想避免这种不希望的异常. 首先让我们创建引发空指针异常的示例 private Boolean isFinished ...
- java skip函数_【Java必修课】图说Stream中的skip()和limit()方法及组合使用
1 简介 本文将讲解Java 8 Stream中的两个方法:skip()和limit().这两个方法是Stream很常用的,不仅各自会被高频使用,还可以组合出现,并能实现一些小功能,如subList和 ...
- java核心教程_核心Java教程
java核心教程 Welcome to Core Java Tutorial. I have written a lot on Core Java and Java EE frameworks. Th ...
- java 自定义表达式_自定义 Java Lambda
用了这么久的 Java,也体验了 Java 8 的 lambda 带来的便捷,但是我一直都是直接用,而从未想过他是如何实现的.比如:为什么在小括号里面可以放一个函数作为参数,自己造一个lambda 应 ...
最新文章
- 博问问题内容页面的前端优化
- NeuSoft(2)添加系统调用
- Collections.sort的使用
- Windows系统使用minGW+msys 编译ffmpeg 0.5的全过程详述
- 阿里云李刚:下一代低延时的直播CDN
- php搜索图片不显示不出来了,PHP CURL采集百度搜寻结果图片不显示问题的解决方法【第1/4页】...
- (41)FPGA状态机一段式
- springcloud21---Config-bus实现配置自动刷新
- karto探秘之open_karto 第五章 --- 栅格地图的生成
- 图像增强_MATLAB图像处理之图像增强一
- 【国产】TASKCTL批量作业调度统一图形监控运维平台
- 易福门流量计SA5000
- qt中使用日志系统,自定义日志彩色输出,qt日志写入文件,自定义qt日志格式,同时提供Qt日志重定向功能(将qDebug信息输出到界面控件)
- ubuntu开启客户端nfs服务_ubuntu16.04搭建nfs服务的方法
- Python身体质量指数BMI
- JS的组成-JS数组方法-JS函数-系统化学习
- C++ 算法篇 广度(宽度)优先搜索(BFS)
- 仿网易考拉完整源码+答辩ppt(java+mysql+JavaScript)资源详细说明
- PADS 快捷命令(无模指令)
- centos7搭建DNS服务器全过程及注意事项(坑)
热门文章
- Vue 2.x 实战之后台管理系统开发(二)
- request.getParameter() 和request.getAttribute() 区别
- 怎么取消打开文件的安全警告?
- 常用脚本--在线重建或重整实例下所有索引
- SecureCRT用证书方式登录
- tigerVNC的简单使用教程(CentOS 自带VNC包的远程桌面连接)
- Exchange服务器系列课程之二--Exchange Server 2003多服务器安装以及管理工具介绍
- python locust 性能测试:HOOKS钩子方法
- GNU make使用(二)
- 巧用推荐墙入口,APP轻松盈利