构建替代数据的时候,一种常见的思路是打乱原数据的排列次序,通过随机置换原数据的排列次序从而产生和原数据系列统计特征(如均值、方差、分布)一致的随机数据。具体到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' factorizationfor 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 from1 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的命令格式:

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

new = old( randsample(1:length(matrix) , length(matrix) ,0),: );

or

new = randsample( old, length(old),0 );

事实上更有用的是第四种情形,多出来一个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最有用的优势是可以很方便的实现随机数的权重分布。

matlab randomsample,randperm和randsample函数用法对比相关推荐

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

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

  2. Matlab 的randperm和randsample函数

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

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

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

  4. python和R数据类型查看、赋值、列表、for循环、函数用法对比示例

    python和R数据类型查看.赋值.列表.for循环.函数用法对比示例 很多工程师可能刚开始的时候只熟悉python或者R其中的一个进行数据科学相关的任务. 那么如果我们对比这学习可以快速了解语言设计 ...

  5. Matlab中repmat、permute函数用法

    repmat函数用法 复制和平铺矩阵 函数repmat 格式:  B = repmat(A, m, n) %将矩阵A复制m*n块,即B由m*n块A平铺而成 B = repmat(A, [m n])%与 ...

  6. matlab中find()函数用法

    一.基本用法 返回矩阵或向量中非零元素的索引 注意:matlab中下标从1开始 举例: (1)向量 返回非零元素下标 find(vector) x=[1 2 3 0 0 6 7 8 9]; find( ...

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

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

  8. matlab中libsvm的svmtrain函数用法

    这里的LIBSVM是一个由台湾大学林智仁(Lin Chih-Jen)教授等开发的SVM模式识别与回归的软件包,使用简单,功能强大,本文主要介绍其在Matlab中的使用. 注意不是matlab自带的sv ...

  9. matlab中短时傅里叶变换tfrstft函数用法

    [TFR,T,F]=TFRSTFT(X,T,N,H,TRACE) X : 信号. T : 时间序列 (默认值 :1:length(X)). N : 频率点数 (默认值: length(X)). H : ...

最新文章

  1. php经典100例,php趣味100例 - php天平称物
  2. buu [GKCTF2020]汉字的秘密
  3. ubuntu date -R查看时区
  4. python初学者用什么开发环境_python初学者用什么开发环境
  5. 最牛逼的微服务架构方案,没有之一!
  6. hbase入门综合概要介绍
  7. 《『若水新闻』客户端开发教程》——06.设计新闻内容UI
  8. 从写博文,看模块化思维的应用
  9. 算法设计与分析学习总结
  10. Visio绘制网络拓扑图
  11. BT没死!305个国外BT资源聚合站点大全
  12. 《客户端性能测试基本流程》
  13. VB通用对话框commom dialog中关于filterindex的设置
  14. 更改已生成的exe文件的ico图标
  15. 进程间通讯:共享内存和消息队列简述
  16. 内容创业,真的是“唯快不破”么?
  17. c语言spoc测验成绩比重,SPOC混合教学模式在C语言程序设计课程的应用
  18. Room 使用及初步分析
  19. 它来了它来了,群晖NAS外网远程访问设置教程终于来了
  20. MyBatis面试可能会遇见的题

热门文章

  1. mac mail 删除邮件服务器,Mac邮件应用程序Mail设置
  2. python mpi开销_GitHub - hustpython/MPIK-Means
  3. python图形界面库哪个好_8个必备的Python GUI库
  4. 测试私有方法 重构_一个全栈工程师重构之路:中小公司 DevOps 落地实践
  5. 为什么说python是计算机语言的未来_Python这么火,为什么说它不是未来的编程语言?...
  6. linux sudo 版本,Linu下如何升级当前sudo版本
  7. MXNet结合kubeflow进行分布式训练
  8. std::make_unique和 std::make_shared区别
  9. 如何发布.Net MVC 网站项目(攻略集锦)
  10. 怎么退出自适应巡航_简单聊聊定速巡航和自适应定速巡航的区别