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函数用法对比相关推荐

  1. Matlab 的randperm和randsample函数

    Matlab中的randperm和randsample函数用法对比 构建替代数据的时候,一种常见的思路是打乱原数据的排列次序,通过随机置换原数据的排列次序从而产生和原数据系列统计特征(如均值.方差.分 ...

  2. [Matlab] Matlab中rand,randn,rands和randi函数使用

    工业过程数据建模QQ群: 516473179 (欢迎交流) rand(m,n) 生成m行n列均匀分布在(0~1)之间的伪随机数 randn (m,n) 生成m行n列标准正态分布的伪随机数(均值为0,方 ...

  3. 如何在MATLAB中调用(运行)“用Python写成的函数或脚本”

    如何在MATLAB中调用"用Python写成的函数或脚本",首先要确保MATLAB知道咱们的Python解释器的位置在哪里. 如果安装了Python的时候把Python加入了系统环 ...

  4. matlab 第一类修正贝塞尔函数,零阶贝塞尔函数 在MATLAB中怎样画出零阶修正贝塞尔函数...

    第二类修正贝塞尔函数的零阶和一阶,分别怎样用mat回忆终究只是回忆,它只代表一段过去,一段历史,回忆再美也只是曾经,告别过去,期待未来. 书上说 (0和1都是下标) K0(z), the zeroth ...

  5. Matlab中的randperm和randsample函数用法总结

    构建替代数据的时候,一种常见的思路是打乱原数据的排列次序,通过随机置换原数据的排列次序从而产生和原数据系列统计特征(如均值.方差.分布)一致的随机数据.具体到Matlab中,此思路的实现会涉及到两个命 ...

  6. matlab randomsample,randperm和randsample函数用法对比

    构建替代数据的时候,一种常见的思路是打乱原数据的排列次序,通过随机置换原数据的排列次序从而产生和原数据系列统计特征(如均值.方差.分布)一致的随机数据.具体到Matlab中,此思路的实现会涉及到两个命 ...

  7. MATLAB中曲线拟合方法总结(包括对数正态分布函数)

    鉴于最近遇到非线性函数拟合问题,本人对网上有关matlab多种类型的线性.非线性曲线拟合的方法进行了总结,希望对各位朋友有所帮助. 1. Matlab有一个功能强大的曲线拟合工具箱 cftool ,使 ...

  8. MATLAB输入x标签,matlab中xlabel,ylabel,legend和text函数中使用latex

    Matlab中巧用LaTex众所周知,大多数科研工作者(大Boss或者象我们一样的学术打工仔)都会用到Matlab生成图片,图片的title或者legend最好有相应的说明,经常用到公式,比方说α,β ...

  9. MATLAB中带有符号变量的阶乘、累加函数的表达与求解

    1.求n的阶乘,方法如下: a.factorial(n) b.gamma(n+1) c.v='n!'; vpa(v) 2.求组合(数),方法如下: a.combntns(x,m) 列举出从n个元素中取 ...

最新文章

  1. 不同浏览器的怪癖小结【转】
  2. CVE-2021-33909:Linux本地权限提升漏洞
  3. HTTP1.0、HTTP1.1和HTTP2.0的区别
  4. 跨时钟域电路设计——结绳法
  5. win2008R2管理员密码修改文档
  6. C 和 C++ 文件操作详解
  7. 机器学习 | 早期停止法原理及Python实现
  8. host切换工具、修改HOST不用重启IE
  9. access制作封装软件_用Access开发《社工服务管理系统》
  10. 索引体积_第16期:索引设计(MySQL 的索引结构)
  11. xml可以打包成jar吗_国内飞机上可以带化妆品吗 坐飞机怎么打包化妆品
  12. mybatis if where标签怎么使用?
  13. JavaScript项目中锁定npm依赖包版本
  14. 安防区块链技术的落地应用
  15. cdc comms interface驱动
  16. matlab生成gif动图
  17. 计算机远程桌面软件,手把手教你远程控制电脑软件推荐
  18. 五分钟学后端技术:一篇文章告诉你如何学习云计算!
  19. 总结组合数的几种求法(模板)
  20. python修改word字体颜色_如何用Python快速优雅的批量修改Word文档样式?

热门文章

  1. 【秒懂音视频开发】26_RTMP服务器搭建
  2. NPDP考试资料汇总
  3. uniPush消息推送(离线)
  4. 【微信小程序】 this.setDate({ })与this.data的区别
  5. snmp-exporter h3c精简监控指标 snmp.yml
  6. 液晶屏模块如何和客户沟通?
  7. Note7燃损真相大白 电池是祸根
  8. 接线 科思模块怎么和plc_plc与变频器的接线图_plc和变频器通讯接线图详解 - 全文...
  9. 重在参与,给自己一个改变未来、体验激情的机会
  10. 刘宝锭 模糊规划理论与程序(Cpp)