2015-02-24 38 views
-3

有一个矩阵X,其大小为400×1000。我想收集L = 10个样本,每个样本的大小均为M = 500,不需要从X的统一分布中取代。如何通过使用Matlab来实现它?任何人都可以给我一个帮助?如何在Matlab中实现这一点?

+0

为什么要扣1分? – user3761566 2015-02-24 01:29:32

+0

我不知道,但我可以想象它会因为你没有包含[mcve](http://stackoverflow.com/help/mcve)。你的问题没有很好的定义。 – kkuilla 2015-02-24 09:21:23

回答

1

最简单的方法是使用统计工具箱中的randsample。这使您可以从人口/数据中随机抽取样本而无需更换。然而,randsample需要一个向量,但你想从矩阵中抽样。从上下文来看,这个矩阵中的每个元素都可能被选择,所以如果我们简单地将矩阵转换成一个向量,并且从这个向量中抽样,你应该得到相同的结果。

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

所以,你可以这样做:

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

上面的代码生成5000×1向量,我们重塑成一个10×500矩阵。

或者,你可以这样做:

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

randsample产生在每次调用一个500×1矢量,所以我们会叠加这些列向量水平,然后转的结果,所以我们得到一个10×500矩阵。


但是,如果你没有做randsample,您可以使用randperm生成的数字从1到400 x 1000随机排列,然后从该置换5000元。然后,您可以索引X以获取最终矩阵。例如:

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

非常感谢你! – user3761566 2015-02-24 21:19:36