В моем коде мне нужно передать несколько больших массивов в функцию, и чтобы упростить читаемость, я использую структуру и называю ее params
.В частности:
params.grid1 = grid1;
params.grid2 = grid2; % these are big arrays
% etc.
% Define x
y = myfun(x,params)
function y = myfun(x,params)
y = x+params.grid2;
end
Однако я заметил, что следующий код гораздо быстрее:
params.grid1 = grid1;
params.grid2 = grid2; % these are big arrays
% etc.
% Define x
y = x+params.grid2;
Кажется, что вызов функции в первой версии кода значительно снижает производительность,К сожалению, для моего проекта я не могу избежать использования функций (иначе это будет беспорядок).Я думал, что передача структур в функцию - это быстрый вариант.Любое предложение о том, как улучшить скорость?
ЗДЕСЬ MWE:
%% Passing matlab structures to function seems to be slow
clear;clc;close all
n = 100000;
rng('default')
grid1 = rand(n,1);
grid2 = rand(n,1);
params.grid1 = grid1;
params.grid2 = grid2; % these are big arrays
% etc.
% Define x
%% disp('Testing code 1 - passing struct to a function')
tic
x = 3;
[y1,y2] = myfun(x,params);
y1
y2
toc
%% disp('Testing code 2 - no function')
tic
x = 3;
y1 = mean(x+(params.grid1).^2);
y2 = mean(x+(params.grid2).^2);
y1
y2
toc
Для его запуска вам также понадобится следующая функция:
function [y1,y2] = myfun(x,params)
y1 = mean(x+(params.grid1).^2);
y2 = mean(x+(params.grid2).^2);
end
Код 1 (передача структуры в функцию): истекшее время составляет 0,001682 секунды.Код 2 (НЕТ передачи структуры в функцию): истекшее время составляет 0,000737 секунд.
Перед тестированием я несколько раз выполнял код, как было предложено.