永发信息网

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

答案:2  悬赏:10  手机版
解决时间 2021-03-19 18:57
  • 提问者网友:做自己de王妃
  • 2021-03-19 08:31
请问,在matlab中,要在m组列向量中随机取n组列向量怎么实现?
最佳答案
  • 五星知识达人网友:底特律间谍
  • 2021-03-19 09:44
楼上的做法不妥。因为
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
全部回答
  • 1楼网友:蕴藏春秋
  • 2021-03-19 10:03
你的这个题有点意思呀,我编了一个,你可以参考一下。
但我的数据数随意取的,如果不满意,可继续探讨:
clear all;clc;
m=100;n=8;
a=rand(5,m);
b=ceil(rand(1,n)*10);
a(b)
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯