快速填充向量的连续元素

Fill consecutive elements of a vector fast

这是 Matlab 中的块 bootstrap 代码,用于以随机顺序生成日期块。首先,一个随机向量由一个块的起始元素组成,后面紧跟着 11 个零。随机值表示日期向量的元素。

randVector(1:12:253,:) = ceil(252*rand(ceil(253/12),nmbBootstrap)); 

for 循环现在应该填充连续元素直到下一个现有值。

for ii = 1:12-1
    randVector(1+ii:12:253,:) = mod(randVector(ii:12:252,:),252)+1; 
end

最终将随机向量转换为真实日期

randDates = dates(randVector(1:end-1,:));

for 循环如何用矢量化代替,因为使用大的 nmbBootstrap 值会花费很多时间?

由于循环矢量化的少量迭代在这种情况下没有提供显着优势。会不会有更多的迭代,一个可能的解决方案是:

nmbBootstrap = 50000;
randVector = rectpulse(ceil(252*rand(ceil(253/12),nmbBootstrap)),12);
additive = repmat((0:11)',ceil(253/12),nmbBootstrap);
randVector = mod(randVector + additive-1,252)+1;