【问题标题】:Function to convert array of heterogeneous variables to structure (preserving name)将异构变量数组转换为结构的函数(保留名称)
【发布时间】:2019-05-08 11:50:22
【问题描述】:

我想编写一个函数,将 variable 数量的变量(在下面的示例中,数组 sc、矩阵 A、数字 T)转换为一个结构包含它们。相应的结构标签应该是变量本身的名称。请参见下面的示例:

sc=[1 2 1 0.5 0.01 0.03];
A=[1,2,3,4;1,2,3,4];
T=2;

我希望我的函数这样做:

data.sc=sc;
data.A=A;
data.T=T;

所以输出是:

数据 =

带有字段的结构:

sc: [1 2 1 0.5000 0.0100 0.0300]
 A: [2×4 double]
 T: 2

用于可变数量的异构参数。

【问题讨论】:

  • 很高兴您想要这个并提供示例输入和输出,但是您尝试解决他的什么问题?请重读How to Ask;您将在那里学到的主要内容是展示您的努力。请edit这个问题,你已经发现了这个问题。如果您有任何代码,请将其添加为 minimal reproducible example,并说明为什么您当前的解决方案无法按预期工作。
  • 我很感激,@Adriaan,但是虽然我知道如何在给定特定输入和输出的情况下编写代码(包括在我的问题中),但我不知道如何将其推广到一个需要可变数量的输入。所以我不能尝试任何通用的东西。我看到我可能在使用varargin,但我无法编写任何完整且可验证的内容。

标签: arrays matlab structure data-conversion


【解决方案1】:

您可以将函数inputnamedynamic field names结合使用。

function outStruct =  dataStructifier(varargin)
    outStruct = struct;
    for k = 1:nargin
        outStruct.(inputname(k)) = varargin{k};
    end
end

这会导致:

sc=[1 2 1 0.5 0.01 0.03];
A=[1,2,3,4;1,2,3,4];
T=2;

data = dataStructifier(sc, A, T)

data = 

  struct with fields:

    sc: [1 2 1 0.5000 0.0100 0.0300]
     A: [2×4 double]
     T: 2

注意该函数在提供“无名变量”时会报错,例如:

data = dataStructifier(sc, A, T, ones(10))

【讨论】:

  • 谢谢!不过,这似乎不适用于可变数量的输入。
  • 啊我明白了,在这种情况下你可以使用varargin,看我的更新。
  • 该死的聪明解决方案。要解决 noname 变量问题,只需在 for 循环中添加一个“try”命令(如果这对您很重要)。
  • @Wick 当然可以,但是您将如何处理catch,这将是非常具体的情况,所以最好不要实施并面对错误。
  • 如果您觉得需要保存该变量,Id' 可能将其命名为 'input3' 或其他名称 - 以表示它是哪个输入。我想这完全取决于 usumdelphini 的想法。
猜你喜欢
  • 1970-01-01
  • 2023-04-08
  • 2019-09-21
  • 2015-06-22
  • 1970-01-01
  • 2020-01-04
  • 1970-01-01
  • 2014-11-13
  • 2018-04-19
相关资源
最近更新 更多