0

我目前正在使用datasampleMATLAB 中的命令从具有 9 个不同数字的 1x9 向量中采样数据。示例代码:

test_durations = [5.0000, 5.9460, 7.0711, 8.4090, 10.000, 11.0668, 12.2474, 13.5540,     15.0000]; 
tduration = datasample (test_durations,1,'Replace', false);

这是在 for 循环中,因此在 for 循环的每次迭代中,代码都会从上述向量中提取一个新数字。所以在第一个循环中它拉出一个 5.64960,然后在第二个循环上它拉出一个 10,依此类推。

我的问题是代码将在每个数据点被采样之前开始重新采样它已经采样的数据。有没有办法告诉它不更换样本,并且在所有其他数据点首先被采样之前不重新采样?

我认为问题的一部分是 for 循环中 datasample 命令的范围仅限于循环的迭代。我希望它独立于循环,以便在重新采样之前对每个数据点进行一次采样。

4

1 回答 1

1

这是一些我认为会做你想做的代码:

% some random data vector
data = rand(10,1);
N = numel(data);

% number of iterations you are performing
% (could be more or less than the number of data elements)
numIter = 25;

% compute sample indices without replacement
% (resampling will occur if numIter>N)
num = numIter;
idx = cell(ceil(numIter/N),1);
for i=1:numel(idx)
    k = min(num,N);
    num = num - k;
    idx{i} = randperm(N, k);
end
idx = [idx{:}];

% main program loop 
for i=1:numIter
    val = data(idx(i));
    % .. do something with sampled value
end

在上面的示例中,我得到以下示例索引:

>> idx
idx =
  Columns 1 through 14
     3     8     2     6     1     5    10     7     4     9     4     8     5     7
  Columns 15 through 25
     1    10     6     9     3     2     1     4    10     5     3

>> tabulate(idx)
  Value    Count   Percent
      1        3     12.00%
      2        2      8.00%
      3        3     12.00%
      4        3     12.00%
      5        3     12.00%
      6        2      8.00%
      7        2      8.00%
      8        2      8.00%
      9        2      8.00%
     10        3     12.00%

所以对于前十次迭代,它只是值的随机排列。接下来的十次迭代也会发生同样的事情。最后在剩下的五次循环迭代中,从十个中随机选择了五个样本。

于 2013-09-14T00:01:36.997 回答