为什么 matlab bootstrap 程序评估 N+1 次?

Why does the matlab bootstrap procedure evaluate N+1 times?

我想 bootstrap 使用 matlab 使用内置命令 "bootstrp"。我注意到,当我只要求 N 次迭代时,该过程进行了 N+1 次迭代。这是为什么?当我构建一个手动循环来执行 bootstrapping 时,它实际上只是 运行s N 次,然后速度更快。这是问题的一个最小示例:

clear all

global iterationcounter

tic

iterationcounter=0;
data=unifrnd(0,1,1,1000); %draw vector of 1000 random numbers

bootstat = bootstrp(100,@testmean,data); %evaluate function for 100 bootstrap samples
toc

使用函数

function [ m ] = testmean( data )
global iterationcounter

m=mean(data);

iterationcounter=iterationcounter+1

end

函数应该评估 100 个样本,但是当我 运行 脚本时,它将评估函数 101 次:

...

iterationcounter =

101

Elapsed time is 0.102291 seconds.

那么为什么要使用这个看似浪费时间的内置 Matlab 函数呢?

bootstrp 调用 bootfun(函数参数)进行完整性检查(来自源代码,在 MATLAB 2015b,bootstrp.m,l.167 ff):

% Sanity check bootfun call and determine dimension and type of result
try
    % Get result of bootfun on actual data, force to a row.
    bootstat = feval(bootfun,bootargs{:});
    bootstat = bootstat(:)';
catch ME
    m = message('stats:bootstrp:BadBootFun');
    MEboot =  MException(m.Identifier,'%s',getString(m));
    ME = addCause(ME,MEboot);
    rethrow(ME);
end

我认为在实际的应用程序中,N>>100,因此额外的开销(远)小于总运行时间的百分之一(不考虑可能的并行化带来的速度提升),因此应该没那么重要吧?