比較多個功能的執行時間
廣泛使用的 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
這種基準測試方法首先出現在這個答案中 。