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