作业帮 > 综合 > 作业

请问,在matlab中,要在m组列向量中随机取n组列向量怎么实现?

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/03/29 05:20:43
请问,在matlab中,要在m组列向量中随机取n组列向量怎么实现?
楼上的做法不妥.因为
b=ceil(rand(1,n)*10);
所产生的数组不能保证不重复(另外,里面的10应为m).
实际上这是一个随机抽样问题,我刚好前段时间编过一个,代码附后,供参考.
算法参见Knuth大名鼎鼎的TAOCP,vol.2,pp142.
你调用的时候,假设A为m个列向量组成的矩阵,可取R=1:m,返回的s即为随机抽取的列下标,然后B=A(:,s).
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