2

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

谢谢您的帮助。

4

3 回答 3

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 ) ); 

有关更多信息,请参阅 和 上的randsample文档sub2ind

于 2013-09-10T05:20:45.690 回答
3

randi如果您的 MATLAB 版本 > 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));

但是对于旧版本,您可以替换randirandsample但需要 Statistics Toolbox。或介绍:

randi = @(imax, m, n) floor(1+rand(m,n)*imax);
于 2013-09-10T06:02:17.973 回答
0

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

假设您的变量在其列上x循环:n

selected = zeros(1,n);
for c = 1:n
    selected(c) =  x(randperm(6,1),n);
end
于 2013-09-10T13:09:43.140 回答