Matlab中的随即置乱函数randperm和randsample函数用法对比
Matlab中的randperm和randsample函数用法对比
转载:http://blog.sina.com.cn/s/blog_a4034b280101k4gg.html
构建替代数据的时候,一种常见的思路是打乱原数据的排列次序,通过随机置换原数据的排列次序从而产生和原数据系列统计特征(如均值、方差、分布)一致的随机数据。具体到Matlab中,此思路的实现会涉及到两个命令:randperm和randsample
p.s. 相关的重新排序命令还包括:
Reordering Algorithms amd Approximate minimum degree permutation colamd Column approximate minimum degree permutation colperm Sparse column permutation based on nonzero count dmperm Dulmage-Mendelsohn decomposition ldl Block LDL' factorization for Hermitian indefinite matrices randperm Random permutation symamd Symmetric approximate minimum degree permutation symrcm Sparse reverse Cuthill-McKee ordering
1、RANDPERM
根据Matlab文档,randperm最常用的用法是是返回一个从1-n的包含n个数的随机排列(每个数字只出现一次)——以行向量的形式
p = randperm(n) returns a row vector containing a random permutation of the integers from 1 to n inclusive
如果希望从1-n的数字序列里面随机返回k个数,则可以使用
p = randperm(n,k)
其中,这k个数之间彼此也是不相同的。可见,randperm能够产生不重复的随机排列,结合原数据,可写成类似下面的形式:
new = old( randperm( size(old,1) ) , : );
这样新数组中的各行就被重排了。如果各列也需要重排,则可以嵌套使用。
Matlab文档中还说,randperm完成的是不重复的重排采样(k-permutations),如果结果中的数需要重复多次出现的情况,则可以用:
randi(n,1,k)
randperm和rand、randi、randn一样,其随机数的生成是收到rng命令控制的,因此,可通过该命令影响随机数据流rand stream的情况。
2、RANDSAMPLE
randsample的命令组合比randperm要复杂,事实上这个命令内部也有对randperm的调用。因此,在适当的情况下,使用randperm的速度理论上比randsample快。(事实上也快很多)
randsample的命令格式:
y = randsample(n,k) y = randsample(population,k) y = randsample(n,k,replacement) y = randsample(population,k,replacement) y = randsample(n,k,true,w) y = randsample(population,k,true,w) y = randsample(s,...)
第一种情形,randsample(n,k)和randperm(n,k)的功能一样,都是产生k个不相同的数(1-n)。
第二种情形,randsample(ARRAY,k),事实上就是randperm和原数组结合使用的形式,从ARRAY数组里面随机取出k个不相同的数。
第三种情形,replacement是一个bool变量,为1的时候,取出的数可能是重复的,为0的时候,可能不重复。
很显然,看到这里,会发现randsample和randperm很相似,譬如,之前旧数组随机排序的需求可写成下面的样式:
new = old( randsample( 1:length(matrix) , length(matrix) ,0),: ); or new = randsample( old, length(old), 0 ); <-- I preferred this.
事实上更有用的是第四种情形,多出来一个w,是权重系数,能够根据此权重系数在原数组(或1-n数组)里面选出可能重复的k个数。典型用法譬如:
R = randsample('ACGT',48,true,[0.15 0.35 0.35 0.15])
上面的语句能够产生48个内容为ATCG的随机字串,且A出现的权重为0.15,其余类推。这个显然在生物信息学中很有用。ATCG也就是DNA的碱基序列。
第五种情形,可以用自己提供的随机数stream替换系统默认的随机数,s必须派生自Matlab的RandStream类。
小结
通过对比,我们很容易的发现randperm比randsample更直接更底层,而randsample则是对各种使用的情形进行了封装。randsample最有用的优势是可以很方便的实现随机数的权重分布。
转载于:https://www.cnblogs.com/easy-busy/p/4541883.html
Matlab中的随即置乱函数randperm和randsample函数用法对比相关推荐
- Matlab 的randperm和randsample函数
Matlab中的randperm和randsample函数用法对比 构建替代数据的时候,一种常见的思路是打乱原数据的排列次序,通过随机置换原数据的排列次序从而产生和原数据系列统计特征(如均值.方差.分 ...
- [Matlab] Matlab中rand,randn,rands和randi函数使用
工业过程数据建模QQ群: 516473179 (欢迎交流) rand(m,n) 生成m行n列均匀分布在(0~1)之间的伪随机数 randn (m,n) 生成m行n列标准正态分布的伪随机数(均值为0,方 ...
- 如何在MATLAB中调用(运行)“用Python写成的函数或脚本”
如何在MATLAB中调用"用Python写成的函数或脚本",首先要确保MATLAB知道咱们的Python解释器的位置在哪里. 如果安装了Python的时候把Python加入了系统环 ...
- matlab 第一类修正贝塞尔函数,零阶贝塞尔函数 在MATLAB中怎样画出零阶修正贝塞尔函数...
第二类修正贝塞尔函数的零阶和一阶,分别怎样用mat回忆终究只是回忆,它只代表一段过去,一段历史,回忆再美也只是曾经,告别过去,期待未来. 书上说 (0和1都是下标) K0(z), the zeroth ...
- Matlab中的randperm和randsample函数用法总结
构建替代数据的时候,一种常见的思路是打乱原数据的排列次序,通过随机置换原数据的排列次序从而产生和原数据系列统计特征(如均值.方差.分布)一致的随机数据.具体到Matlab中,此思路的实现会涉及到两个命 ...
- matlab randomsample,randperm和randsample函数用法对比
构建替代数据的时候,一种常见的思路是打乱原数据的排列次序,通过随机置换原数据的排列次序从而产生和原数据系列统计特征(如均值.方差.分布)一致的随机数据.具体到Matlab中,此思路的实现会涉及到两个命 ...
- MATLAB中曲线拟合方法总结(包括对数正态分布函数)
鉴于最近遇到非线性函数拟合问题,本人对网上有关matlab多种类型的线性.非线性曲线拟合的方法进行了总结,希望对各位朋友有所帮助. 1. Matlab有一个功能强大的曲线拟合工具箱 cftool ,使 ...
- MATLAB输入x标签,matlab中xlabel,ylabel,legend和text函数中使用latex
Matlab中巧用LaTex众所周知,大多数科研工作者(大Boss或者象我们一样的学术打工仔)都会用到Matlab生成图片,图片的title或者legend最好有相应的说明,经常用到公式,比方说α,β ...
- MATLAB中带有符号变量的阶乘、累加函数的表达与求解
1.求n的阶乘,方法如下: a.factorial(n) b.gamma(n+1) c.v='n!'; vpa(v) 2.求组合(数),方法如下: a.combntns(x,m) 列举出从n个元素中取 ...
最新文章
- 不同浏览器的怪癖小结【转】
- CVE-2021-33909:Linux本地权限提升漏洞
- HTTP1.0、HTTP1.1和HTTP2.0的区别
- 跨时钟域电路设计——结绳法
- win2008R2管理员密码修改文档
- C 和 C++ 文件操作详解
- 机器学习 | 早期停止法原理及Python实现
- host切换工具、修改HOST不用重启IE
- access制作封装软件_用Access开发《社工服务管理系统》
- 索引体积_第16期:索引设计(MySQL 的索引结构)
- xml可以打包成jar吗_国内飞机上可以带化妆品吗 坐飞机怎么打包化妆品
- mybatis if where标签怎么使用?
- JavaScript项目中锁定npm依赖包版本
- 安防区块链技术的落地应用
- cdc comms interface驱动
- matlab生成gif动图
- 计算机远程桌面软件,手把手教你远程控制电脑软件推荐
- 五分钟学后端技术:一篇文章告诉你如何学习云计算!
- 总结组合数的几种求法(模板)
- python修改word字体颜色_如何用Python快速优雅的批量修改Word文档样式?
热门文章
- 【秒懂音视频开发】26_RTMP服务器搭建
- NPDP考试资料汇总
- uniPush消息推送(离线)
- 【微信小程序】 this.setDate({ })与this.data的区别
- snmp-exporter h3c精简监控指标 snmp.yml
- 液晶屏模块如何和客户沟通?
- Note7燃损真相大白 电池是祸根
- 接线 科思模块怎么和plc_plc与变频器的接线图_plc和变频器通讯接线图详解 - 全文...
- 重在参与,给自己一个改变未来、体验激情的机会
- 刘宝锭 模糊规划理论与程序(Cpp)