필터 지우기
필터 지우기

benchmarking anonymous functions with timeit

조회 수: 2 (최근 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 CenterFile Exchange에서 Resizing and Reshaping Matrices에 대해 자세히 알아보기

제품


릴리스

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by