比较多个功能的执行时间

广泛使用的 tictoc 组合可以提供函数或代码片段的执行时间的粗略概念。

*为了比较几个功能,不应该使用它。*为什么?这几乎是不可能提供相等的条件下对所有代码段,以使用上述溶液在脚本中进行比较。也许函数共享相同的函数空间和公共变量,因此后来称为函数和代码片段已经利用了先前初始化的变量和函数。此外,没有人能够了解 JIT 编译器是否会同等地处理这些后续调用的片段。

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

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

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

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