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

3

问题标题已经解释了我想要的内容。例如,如果某一列中有6个元素,如何随机选择其中1个元素。如果可能,请保持简单易懂。

感谢您的帮助。

3个回答

5

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

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

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

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

更多信息请参见randsamplesub2ind的文档。


3

如果你的MATLAB版本大于R2008a,你可以使用randi

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

然而,对于旧版本,您可以使用randsample代替randi,但这需要统计工具箱。或者引入:

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

我猜floor(1+rand(m,n)*imax)可以稍微简化为ceil(rand(m,n)*imax) - Dennis Jaheruddin

0
这里有一个简单的方法来做。请注意,没有循环的版本应该更高效。
假设你的变量是x,循环遍历它的n列:
selected = zeros(1,n);
for c = 1:n
    selected(c) =  x(randperm(6,1),n);
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接