首页 > 解决方案 > MATLAB 结构似乎很慢

问题描述

在我的代码中,我必须将几个大数组传递给一个函数,为了简化可读性,我使用了一个结构,我称之为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 秒。

在测试之前,我按照建议运行了几次代码。

标签: matlabperformancefunctionstructure

解决方案


推荐阅读