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

比如我想实现产生8个1-----100的随机数,而且不要重复,我自己另外写了一个函数,但是感觉写得不好,有没有现成可用的函数啊?... 比如我想实现产生8个1-----100的随机数,而且不要重复,我自己另外写了一个函数,但是感觉写得不好,有没有现成可用的函数啊? 展开
 我来答
tianxiawulang
推荐于2017-11-25 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2561万
展开全部

猜测楼主想要的是随机生成不重复的整数吧?如果是浮点数,直接用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

 

百度网友16c9680
2021-04-12
知道答主
回答量:7
采纳率:0%
帮助的人:1.9万
展开全部
p = randperm(100,8)

其中,p = randperm(n,k) 返回行向量,其中包含在 1 到 n(包括二者)之间随机选择的 k 个唯一整数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lhmhz
高粉答主

2013-07-20 · 专注matlab等在各领域中的应用。
lhmhz
采纳数:7263 获赞数:16989

向TA提问 私信TA
展开全部
rand(1,8)*100
ans =
Columns 1 through 7
81.4724 90.5792 12.6987 91.3376 63.2359 9.7540 27.8498
Column 8
54.6882
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
流星日食
2013-07-20 · TA获得超过1056个赞
知道小有建树答主
回答量:287
采纳率:83%
帮助的人:247万
展开全部
clc
N=20;
A=ceil(rand(1,20)*100);
[b, m, n]=unique(A);
d=b(1:8)

运行结果
d =

12 18 19 20 21 23 24 26
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
市叶孤枋aW
2013-07-27 · 超过10用户采纳过TA的回答
知道答主
回答量:28
采纳率:0%
帮助的人:29.9万
展开全部
x=randperm(100);x=x(1:8)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式