2013-10-08 72 views
1

我需要选择i矩阵的随机行。现在我在做这样的:随机删除行

[m, n] = size(W_tot_migl); % m data points, n dimensions 
randomPoints = []; 
for i=1:14250 
    index = random('unid', m); % Pick the index at random. 
    randomPoints(i,:) = W_tot_migl(index,:); % Add random point. 
    W_tot_migl(index,:) = []; % Delete selected row. 
    m = m-1; 
end 

有一个更快的方法,也许避免了循环?

回答

1

这是一个比较MATLAB的方式来做到这一点:

nr = 5; %How many do you want to pick 

n = size(W_tot_migl,1); 
idx = randperm(n,nr); 

randomPoints = W_tot_migl(idx,:); 
W_tot_migl(idx,:) = []; 

注意,随你挑他们一下子,你不需要担心重复。如果这是从原始文件中删除它们的唯一原因,则最后一行现在已经过时。

+1

请注意,对于(不是太老)的Matlab版本'randperm'只承认第一个参数。在这种情况下,你可以使用:'idx = randperm(n); idx = idx(1:nr);' –