使用动态名称访问 Matlab 工作区变量

Posted

技术标签:

【中文标题】使用动态名称访问 Matlab 工作区变量【英文标题】:Accessing Matlab Workspace Variables with Dynamic Names 【发布时间】:2014-07-23 00:12:55 【问题描述】:

快速提问。

我有一个列出不同名称的 excel 文件。我将这些名称导入 Matlab,执行计算,然后将数据保存为 .dat 文件。

例如:

Apple.dat: 2, 5, 50, 2993
Orange.dat: 5003, 292, 29, 2994
Banana.dat: 3992, 3, 39, 2995

然后我使用 eval 读取每个单独的 .dat 文件,并将数据/矩阵作为单独的变量加载到主工作区中。此时,我拥有 WorkSpace 中的所有变量以及包含此列表 (ListofVariables) 的单元格文件。

我的主要目标是在不知道变量名称的情况下访问每个变量 - 因为我的 excel 文档会随着时间而改变!但是,如果我输入:

ListofVariables(i,1)

它只会拉出“Apple”,而不是与变量 Apple 关联的数据。是否可以在不知道变量名的情况下访问变量数据?

感谢您的帮助!

【问题讨论】:

更多关于你实际在做什么的细节会很有帮助。解决您的任务的关键可能在您的excel文件中,或者在您的处理和保存过程中,或者在您的加载过程中。作为一般提示:如果您的任务需要“评估”,那么您的方法有问题。 谢谢乔治。我将重新评估保存每个文件。感谢您的宝贵时间! 【参考方案1】:

你可以使用 eval:

%// Simulate loading .dat files
apple = [2 5 50 2993];
orange = [5003 292 29 2994];
banana = [3992 3 39 2995];

ListofVariables = 'apple', 'orange', 'banana';

%// load data to a structure    
data = [];
for k=1:numel(ListofVariables)
    name = ListofVariablesk;
    data = setfield(data, name, eval(name));
end
%//The data from all files is in the structure data

%// load data to a cell
data = ;
for k=1:numel(ListofVariables)
    name = ListofVariablesk;
    data(end+1) = eval(name);
end
%//The data from all files is in the cell (the names are lost, but you can access them by index, using the same order as ListofVariables)

【讨论】:

非常感谢,Seb。我从没想过结构!

以上是关于使用动态名称访问 Matlab 工作区变量的主要内容,如果未能解决你的问题,请参考以下文章

终止通过 nohup 运行的 matlab 并访问工作区变量

聪明的动态变量名称访问

命名工作区变量并将其保存到名称中更改数字的文件中 - Matlab

matlab 批量运算命名变量

matlAB如何保存变量

matlAB如何保存变量