Matlab中的randperm和randsample函数用法对比

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

p.s. 相关的重新排序命令还包括:

1
2
3
4
5
6
7
8
9
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个数的随机排列(每个数字只出现一次)——以行向量的形式

1
p = randperm(n) returns a row vector containing a random permutation of the integers from 1 to n inclusive

如果希望从1-n的数字序列里面随机返回k个数,则可以使用

1
p = randperm(n,k)

其中,这k个数之间彼此也是不相同的。可见,randperm能够产生不重复的随机排列,结合原数据,可写成类似下面的形式:

1
new = old( randperm(  size(old,1)  ) , : );

这样新数组中的各行就被重排了。如果各列也需要重排,则可以嵌套使用。

Matlab文档中还说,randperm完成的是不重复的重排采样(k-permutations),如果结果中的数需要重复多次出现的情况,则可以用:

1
randi(n,1,k)

randperm和rand、randi、randn一样,其随机数的生成是收到rng命令控制的,因此,可通过该命令影响随机数据流rand stream的情况。

2、RANDSAMPLE

randsample的命令组合比randperm要复杂,事实上这个命令内部也有对randperm的调用。因此,在适当的情况下,使用randperm的速度理论上比randsample快。(事实上也快很多)

randsample的命令格式:

1
2
3
4
5
6
7
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很相似,譬如,之前旧数组随机排序的需求可写成下面的样式:

1
2
3
new = old( randsample( 1:length(matrix) , length(matrix) ,0),: );
or
new = randsample( old, length(old), 0 );   <-- I preferred this.

事实上更有用的是第四种情形,多出来一个w,是权重系数,能够根据此权重系数在原数组(或1-n数组)里面选出可能重复的k个数。典型用法譬如:

1
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最有用的优势是可以很方便的实现随机数的权重分布。

Matlab 的randperm和randsample函数相关推荐

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

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

  2. Matlab中的随即置乱函数randperm和randsample函数用法对比

    Matlab中的randperm和randsample函数用法对比 转载:http://blog.sina.com.cn/s/blog_a4034b280101k4gg.html 构建替代数据的时候, ...

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

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

  4. C语言复现Matlab的randperm(N,M)函数,产生不重复的随机整数

    Matlab中:P = randperm(N,M) 产生1~N中M个随机数,不重复 所以randperm(N,M)中,N一定大于等于M. #include <algorithm> #inc ...

  5. Matlab中画图以及plot函数及legend函数详解

    Matlab中plot函数及legend函数详解 Matlab中plot函数全功能解析Matlab中plot函数及legend函数详解 功能 二维曲线绘图 语法 plot(Y) plot(X1,Y1, ...

  6. matlab repmate,MATLAB中“repmat”与“cat”函数的用法

    MATLAB中"repmat"与"cat"函数的用法 1. repmat函数 >> z=repmat(5,2,3) z = 5 5 5 5 5 5 ...

  7. matlab 求复数的模长,matlab计算带有复数的函数,最后求复数函数的模,结果里面却有...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 matlab计算带有复数的函数,最后求复数函数的模,结果里面却有复数标志i,输入自变量,得到的结果确实是实数,不知道怎么回事; 代码如下: syms n2 ...

  8. Matlab命令集--常用字符串函数

    Matlab命令集--常用字符串函数 常用函数 eval  :运行字符串表示的表达式 char  :将数组变成字符串 double:将数字字符串变成数字 字符串操作 deblank :去掉字符串末尾的 ...

  9. matlab给0数组赋值,MATLAB中怎么把一个函数的一部分赋值给一个变量或数组,比如怎么把sin(x)大于0的部分赋值给f....

    答:你可以编一个for循环么,判断sin(x)时候大于0,如果大于0 f=sin(x) 答:总体思路:设定筛选条件,将数组中符合条件的元素筛选出来(可以筛选出元素值也可以筛选出元素对应的下标),然后将 ...

最新文章

  1. typeof instanceof 之间的区别总结
  2. Java学习从入门到精通
  3. ping发送超大数据包(高级用法)
  4. P3085 [USACO13OPEN]Yin and Yang G 点分治
  5. 2016-8-4学习正则表达式
  6. Centos7安装jdk1.8
  7. mdx 医学词典_一些西医学方面词典的介绍
  8. Unity3D眼镜Shader技术实现
  9. 加上华为mate30系列,9月还有5场新机发布会,你更期待哪场
  10. task manager memory meaning
  11. workerman wss 配置备忘录
  12. 玩转 IDEA 系列教程——强烈推荐官方中文(汉化)插件!
  13. c++逆天改命进阶--AVLTree
  14. 元宇宙赋能传统产业创新架构
  15. 已到年中,华为坚持今年实现2亿出货量目标,然压力山大
  16. 电子商务的发展现状与趋势分析
  17. 涨知识!芯片是怎么做出来的,今天终于看懂了
  18. 【总结】1172- 在滴滴和头条干了2年,分享几点感悟!
  19. YL-236 LCD12864汉字显示C语言编程
  20. Opencv之微信二维码检测与解析

热门文章

  1. Android模拟器更改DNS联网问题
  2. OIS几个重要的类的使用
  3. (android源码)朋友写的吉普赛读心术
  4. 数组中最大连续子序和
  5. server sql top速度变慢解决方案_SQL Server查询速度慢原因及优化方法
  6. 四轴飞行器——Pixhawk指示灯和蜂鸣器的含义
  7. 设备健康管理:如何运用人工智能技术提升维护效率?
  8. 如何提升企业知名度?
  9. 什么是JVM?有什么作用?工作机制如何
  10. Redis6.0.6_02_Redis 入门基础