如何在MATLAB中随机选取矩阵每列中的元素?

时间:2013-09-10 05:15:16

标签: matlab random-sample

问题标题解释了我想要的内容。例如,如果特定列中有6个元素,如何从该列中随机选择1个元素。如果可能,请保持简单。

感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

假设您有一个大小为A的矩阵m - by - n。您希望随机从每个n列中选择一个元素:

>> rows = randsample( m, n ); % sample n times from integers 1:m

现在rowsn个值,每个值代表相应列的随机条目 要访问这些值

>> sampledValues = A( sub2ind( size(A), rows, 1:n ) ); 

有关详细信息,请参阅randsamplesub2ind上的文档。

答案 1 :(得分:3)

如果您的MATLAB版本是>您可以使用randi R2008a

samples = A(sparse(randi(size(A,1),size(A,2),1), 1:size(A,2), true));

,或者

[m, n] = size(A);
samples = A(sparse(randi(m,n,1), 1:n, true));

但是对于旧版本,您可以将randi替换为randsample,但这需要使用Statistics Toolbox。或者介绍:

randi = @(imax, m, n) floor(1+rand(m,n)*imax);

答案 2 :(得分:0)

这是一种简单的方法。请注意,没有循环的版本应该更有效。

假设您的变量x遍及其n列:

selected = zeros(1,n);
for c = 1:n
    selected(c) =  x(randperm(6,1),n);
end