matlab - 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 秒。
在测试之前,我按照建议运行了几次代码。
解决方案
推荐阅读
- git - 如何将文件夹添加到项目根目录的现有 git 项目?
- postgresql - Postgres 使用字符串中的枚举更新列
- hibernate - 引起:java.lang.NoSuchMethodError: org.hibernate.SessionFactory.getCurrentSession()Lorg/hibernate/classic/Session;
- alfresco - Alfresco - 创建用户时出错
- scala - Spark:加载/解析空格分隔加引号字符串
- regex - 使用正则表达式检查逗号分隔的代码字符串是否包含给定的代码
- angular - Angular - 单击后数据不刷新
- gitbook - 如何在 gitbook 中启用多语言
- agent - JaCaMo / Jason中的过渡系统(行为)环境中的错误
- microservices - 微服务应该处理这个还是 api 网关?