benchmarking anonymous functions with timeit

4 ビュー (過去 30 日間)
seth patterson
seth patterson 2022 年 11 月 24 日
コメント済み: Jan 2022 年 11 月 25 日
I was reading this Measure the Performance of Your Code and was wondering about a more complicated example using timeit with nested anonymous functions?
Suppose that you want to compare the speed of different ways to flatten a matrix into a vector.
% make an image
widthPixels = 640;
heightPixels = 480;
raw_data = @(width,height)(randn(width,height));
nrmi = @(x)(x/(max(x(:))));
image = @(counts)(single( uint8(255*counts)).^0.5);
% different ways to flatten
alg1 = @(x)(x(:));
alg2 = @(x)(reshape(x,1,[]));
alg3 = @(x)(reshape(x,[],1)'));
% basic way
nIterations = 100;
totalTime = 0;
for i = 1:nIterations
tic;
y = alg1(x);
totalTime = totalTime + toc;
end
avgTime = totalTime / nIterations;
But I really want to use timeit but not quite sure how it works. Here's the basic idea of what I'd want to do.
timeit(alg1(image(raw_data(heightPixels,widthPixels)))
Or just define multiple anonymous functions on one line. Maybe something like this? I'm not sure how you would chain all of them together...
image = @()(single( uint8(255*@(x)(x/(max(x(:)))).^0.5);
  4 件のコメント
Stephen23
Stephen23 2022 年 11 月 25 日
編集済み: Stephen23 2022 年 11 月 25 日
"And you wanted the timeit function to call the pipeline of functions?"
As I wrote in my last comment, you need to call them, unlike your attempts to create function handles out of things that are already function handles:
thisisafunctionhandle = @(x) dowhateverwith(x); % this defines a function handle.
@thisisafunctionhandle % <- ERROR! What you are doing, trying to create a function handle out of a function handle
thisisafunctionhandle(invalue) % <- What you should be doing, calling the function!
You should revise how function handles are created and called:
w = 3;
h = 4;
timeit(@() alg1(image(nrmi(raw_data(w,h)))))
Jan
Jan 2022 年 11 月 25 日
@seth patterson: Just a note: sqrt is faster than .^0.5 :
x = rand(640, 480);
timeit(@() sqrt(x))
ans = 3.1235e-04
timeit(@() x.^0.5)
ans = 6.9270e-04

サインインしてコメントする。

回答 (0 件)

カテゴリ

Help Center および File ExchangePerformance and Memory についてさらに検索

製品


リリース

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by