MATLAB比较多种功能的执行时间

示例

的广泛使用的组合tic和  toc可提供的功能或代码段的执行时间的粗略的想法。

为了比较几个功能,不应该使用它。为什么?使用上述解决方案几乎不可能为所有代码片段提供相等的条件以在脚本内进行比较。也许函数共享相同的函数空间和公共变量,所以后来称为函数和代码片段的代码已经利用了先前初始化的变量和函数。同样,也没有见识到JIT编译器是否会平等地处理这些随后的代码片段。


基准测试的专用功能是timeit。以下示例说明了其用法。

有数组A和矩阵B。应该通过计算不同元素的数量来确定哪一行B最相似A。

function t = bench()
    A = [0 1 1 1 0 0];
    B = perms(A);

    % functions to compare
    fcns = {
        @() compare1(A,B);
        @() compare2(A,B);
        @() compare3(A,B);
        @() compare4(A,B);
    };

    % timeit
    t = cellfun(@timeit, fcns);
end

function Z = compare1(A,B)  
    Z = sum(  bsxfun(@eq,  A,B) , 2);
end
function Z = compare2(A,B)  
    Z = sum(bsxfun(@xor, A, B),2);
end
function Z = compare3(A,B)  
    A = logical(A);
    Z = sum(B(:,~A),2) + sum(~B(:,A),2);
end
function Z = compare4(A,B)  
     Z = pdist2( A, B, 'hamming', 'Smallest', 1 );
end

这种基准测试方法首先出现在此答案中。