如何在Matlab中实现?

如何在Matlab中实现?,matlab,Matlab,有一个矩阵X,其大小为400×1000。我想收集L=10个样本,每个样本的大小为M=500,从X上的均匀分布中抽取,无需替换。如何用Matlab实现?任何人都可以给我帮助吗?最简单的方法是使用统计工具箱。这允许您从总体/数据中随机抽取样本,无需替换。但是,randsample接受一个向量,但您希望从矩阵中采样。从上下文判断,这个矩阵中的每个元素都有可能被选择,所以如果我们简单地将矩阵转换成一个向量,然后从这个向量中取样,你应该会得到相同的结果 如果您想要10个长度为500的样本,您可以调用ran

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

最简单的方法是使用统计工具箱。这允许您从总体/数据中随机抽取样本,无需替换。但是,
randsample
接受一个向量,但您希望从矩阵中采样。从上下文判断,这个矩阵中的每个元素都有可能被选择,所以如果我们简单地将矩阵转换成一个向量,然后从这个向量中取样,你应该会得到相同的结果

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

所以你可以这样做:

Y = randsample(X(:), 5000);
Y = reshape(Y, 10, 500);
Y = [];
for idx = 1 : 10 
    Y = [Y randsample(X(:), 500)];
end
Y = Y.';
上面的代码生成了一个5000 x 1的向量,我们将其重塑为一个10 x 500的矩阵

或者您可以这样做:

Y = randsample(X(:), 5000);
Y = reshape(Y, 10, 500);
Y = [];
for idx = 1 : 10 
    Y = [Y randsample(X(:), 500)];
end
Y = Y.';
randsample
在每次调用时生成一个500 x 1的向量,因此我们将水平堆叠这些列向量,然后转置结果,从而得到一个10 x 500的矩阵


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

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

我不知道,但我可以想象这是因为你没有包括一个。你的问题没有那么明确。