【问题标题】:MATLAB execute function for multiple variables in loopMATLAB在循环中执行多个变量的函数
【发布时间】:2016-04-22 03:41:15
【问题描述】:

要在 MATLAB 中处理数据,我必须执行某个函数,我们称之为function()。由于要处理的数据很多,比如大型数组TimeVoltage(还有更多),我会像这样一一执行:

TimeNew = function(Time);
VoltageNew = function(Voltage);
... etc

所以这大约完成了 10 次。此外,我必须多次执行此类操作,导致大约 30 行代码都执行相同的操作,但针对不同的变量。

有没有办法优化这个?我正在使用最新版本的 MATLAB (2015b) 并安装了所有工具箱。

【问题讨论】:

    标签: matlab function optimization


    【解决方案1】:

    你可以试试cellfun

    allResultsAsACell = cellfun(@function, {Time,Voltage,...,varN});
    

    这相当于

    allResultsAsACell{1} = function(Time);
    allResultsAsACell{2} = function(Voltage);
    ...
    allResultsAsACell{N} = function{VarN};
    

    问题只是将索引与值匹配。如果你需要的话,我相信你也可以把它们编码进去(例如timeInd = 1; voltageInd =2; ...

    要查看有关cellfun 方法的更多信息,请键入

    help cellfun
    

    进入您的 MATLAB 终端。

    【讨论】:

      【解决方案2】:

      一种可能的解决方案是将输入数组存储到 struct 中,他们使用该结构作为函数的输入。

      在函数中,您可以使用fieldnamesgetfiled内置函数识别每个字段的数量和内容。

      该函数可以返回一个structure 作为输出,其名称可以与输入结构的名称相同。

      在下面的示例中,生成了三个数组,函数简单地计算它们的平方。

      var_1=1:10;
      var_2=11:20;
      var_3=21:30;
      
      str_in=struct('var_1',var_1,'var_2',var_2,'var_3',var_3)
      
      str_out=my_function(str_in)
      

      函数

      function [str_out]=my_function(str_in)
      f_names=fieldnames(str_in)
      n_fields=length(f_names);
      
      for i=1:n_fields
         x=getfield(str_in,f_names{i})
         str_out.(f_names{i})=x.^2;
      end
      

      希望这会有所帮助。

      卡普拉'

      【讨论】:

      • 谢谢,但我不会得到唯一的变量 str_out 吗?
      • 哦,我想我需要将函数声明移到另一个 .m 文件中,对吧?我收到“在此上下文中不允许函数定义”的错误。
      • 是的,该函数应该在一个单独的文件中。 Wrt 输出:是的,输出变量将是一个与输入结构具有相同字段的结构
      • 好的,我知道输出也将是一个结构。但是我可以从中访问生成的变量吗?
      • 你的意思是什么只是从那个访问一个生成的变量
      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 2016-11-15
      • 1970-01-01
      • 1970-01-01
      • 2012-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多