Matlab:如何使用字符串调用对象属性?

时间:2014-11-20 19:43:53

标签: matlab object dynamic matrix

我目前正在开发一个包含两个对象的数据分析程序:ExperimentRunSummaryExperiment对象包含RunSummary对象的多个实例。每个RunSummary对象包含多个属性(行矩阵),每个属性包含给定运行的不同数据点。

例如:Experiment.RunSummary(5).Tmean是行矩阵,包含我实验中第5次运行的所有平均扭矩值。

我目前正在尝试找到一种方法,将特定运行中的选定公共属性组合成可用于进一步分析的单个矩阵。我不得不这样做的当前方式是:

X(:,1) = [Drilling.Runs(1).Tmean,...
             Drilling.Runs(2).Tmean,...
                 Drilling.Runs(3).Tmean,...
                     Drilling.Runs(5).Tmean]';

X(:,2) = [Drilling.Runs(1).Fmean,...
             Drilling.Runs(2).Fmean,...
                 Drilling.Runs(3).Fmean,...
                     Drilling.Runs(5).Fmean]';

此代码从运行1,2,3和5获取平均扭矩(Tmean)和平均力(Fmean),并将它们组合在单个矩阵X中,与Tmean组合用于第一列中的所有运行和Fmean in第二。虽然这种方法有效,但我有超过20种不同的属性和15种不同的运行,这使得这种编码非常繁琐。

我尝试使用get(Experiment.RunSummary(i),'Tmean')等代码尝试检索这些属性matricies,但遇到了错误:

  

无法从RunSummary转换为double。

  • 有没有办法轻松组合所有这些不同的属性 使用字符串将单个矩阵确定为使用哪些属性?

谢谢,   地铁

编辑:Drilling是Experiment对象的名称。运行是RunSummary对象的名称。

1 个答案:

答案 0 :(得分:3)

您可以使用dynamic fields。该文档适用于结构,但相同的主要适用于类(至少在我的R2012a安装上)。 您还可以使用对象数组索引的逗号分隔性质来压缩代码。 例如:

I      = [1,2,3,5]              ;
props  = {'Tmean','Fmean'}      ;
Nprops = length(props)          ;
X      = zeros(length(I),Nprops);

for k = 1:Nprops 
    X(:,k) = [Drilling.Runs(I).(props{k})]';
end