在MATLAB中使用替换生成或不替换生成采样行矩阵的快速方法

时间:2018-09-27 08:16:18

标签: matlab vectorization resampling

我有一些输入行。为了执行一些数值统计测试,我需要大量相同大小的样本,这些样本是从输入行中采样而来的,有无替换。我有一些非常简单的代码可以做到:

inputRow = [1 3 4 2 7 5 8 6];
rowSize = numel(inputRow);
nPermutations = 10;
permutedMatrix = nan(nPermutations,rowSize);

replaceFlag = true;

permutedMatrix(1,:) = inputRow;
for iPerm = 2:nPermutations
    permutedMatrix(iPerm,:) = datasample(inputRow,rowSize,'Replace',replaceFlag);
end

我的问题是:是否可以生成没有for循环的所需矩阵?

1 个答案:

答案 0 :(得分:1)

我希望这会有所帮助,

替换后重新采样:

input=[2 3 4 2 3 4];

len=size(input,2);
number_of_permutations=10;

rand_idx=randi(len,1,len*number_of_permutations);
permutation_matrix=zeros(len,number_of_permutations);
permutation_matrix(:)=input(rand_idx);
permutation_matrix=permutation_matrix';

这是重采样而无需替换

input=[2 3 4 2 3 4];

len=size(input,2);
number_of_permutations=10;

rand_idx=repmat(randperm(len,len),1,number_of_permutations);
permutation_matrix=zeros(len,number_of_permutations);
permutation_matrix(:)=input(rand_idx);
permutation_matrix=permutation_matrix';