Структуры MATLAB кажутся медленными - PullRequest
0 голосов
/ 23 октября 2018

В моем коде мне нужно передать несколько больших массивов в функцию, и чтобы упростить читаемость, я использую структуру и называю ее 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 секунд.

Перед тестированием я несколько раз выполнял код, как было предложено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...