如何在Matlab中实现这一点?

时间:2015-02-24 01:18:10

标签: matlab

有一个矩阵X,其大小为400 x 1000。我想收集L = 10个样本,每个样本大小为M = 500,无需替换X上的均匀分布。如何使用Matlab实现它?任何人都可以给我一个帮助吗?

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用统计工具箱中的randsample。这允许您从群体/数据中随机抽取样本而无需替换。但是,randsample接受向量,但您想从矩阵中进行采样。从上下文来看,这个矩阵中的每个元素都可能被选中,所以如果我们只是将矩阵转换为一个向量,并且我们从这个向量中进行采样,那么你应该得到相同的结果。

如果您想要10个长度为500的样本,您可以调用randsample一次并从矩阵中获取5000个样本,并将其重新整形为10 x 500矩阵,其中每行代表一个500个元素样本,或循环这次调用10次并在每次调用时连接结果。

所以你可以这样做:

Y = randsample(X(:), 5000);
Y = reshape(Y, 10, 500);

上面的代码生成一个5000 x 1的向量,我们将其重新整形为10 x 500矩阵。

或者你可以这样做:

Y = [];
for idx = 1 : 10 
    Y = [Y randsample(X(:), 500)];
end
Y = Y.';

randsample在每次调用时生成一个500 x 1向量,因此我们将水平堆叠这些列向量,然后转置结果,以便获得10 x 500矩阵。


但是,如果您没有randsample,则可以使用randperm生成从1到400 x 1000的数字的随机排列,并从此排列中选择5000个元素。然后,您可以索引到X以获取最终矩阵。类似的东西:

idx = randperm(400*1000, 5000);
Y = reshape(X(idx), 10, 500);