matlab如何产生不重复的随机数(转)

以下内容来自百度知道

http://zhidao.baidu.com/link?url=tScG3G3Bq1DMndjiDEm_RxsydMkQuzJqo6X1a5N4lxsVJXPkaBH3mXAFOnXPulmMEH1KPlCn4ERh2BV5YiLNlq

matlab如何产生不重复的随机数啊?

2013-07-20 19:27 zhuyuefeng2009 | 分类:其他编程语言 | 浏览652次
比如我想实现产生8个1-----100的随机数,而且不要重复,我自己另外写了一个函数,但是感觉写得不好,有没有现成可用的函数啊?
2013-07-22 07:48 提问者采纳

猜测楼主想要的是随机生成不重复的整数吧?如果是浮点数,直接用rand就行,重复的概率极低。

 

楼上的两个回答,一个生成的是浮点数,另一个不能保证抽样的均匀性(从结果可以看到,数据集中在10-30之间)。

 

生成不重复整数的问题其实是一个不放回随机抽样的问题,可以使用下面的这个函数:

function  s = sampling(R, n)
% 选择抽样,R为记录集合,n为抽取的样本数
% 算法参考:D. E. Knuth, TAOCP, vol. 2 , pp142,稍有改动
  
% 编写函数时用的测试数据
if  ~nargin
     R =  1  8 ;
     n =  4 ;
end
  
N = length(R);
t =  0 ;   % 处理过的记录总数
m =  0 ;   % 已选得的记录数
  
while  1
     U  = rand;
     if  (N-t)*U < n-m
         m = m +  1 ;
         s(m) = R(t+ 1 );
         % 若已抽取到足够的记录,则算法终止
         if  m >= n,  break , end
     end
     t = t +  1 ;
end

 

调用实例:

>> sampling( 1 : 100 , 8 )
ans =
      8     21     24     31     42     85     91     92

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值