benchmarking anonymous functions with timeit

5 Ansichten (letzte 30 Tage)
seth patterson
seth patterson am 24 Nov. 2022
Kommentiert: Jan am 25 Nov. 2022
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 Kommentare
Stephen23
Stephen23 am 25 Nov. 2022
Bearbeitet: Stephen23 am 25 Nov. 2022
"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 am 25 Nov. 2022
@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

Melden Sie sich an, um zu kommentieren.

Antworten (0)

Kategorien

Mehr zu Performance and Memory finden Sie in Help Center und File Exchange

Produkte


Version

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by