比较多个功能的执行时间
广泛使用的 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
这种基准测试方法首先出现在这个答案中 。