如何找出我的 matlab 变量存储在哪个结构中?

How do I find out in which strucutre my matlab variable is stored in?

我有 .mat 格式的原始数据。数据由一堆标题为 'TimeGroup_XX' 的结构组成,其中 xx 只是一个随机数。这些结构中的每一个都包含一堆信号及其相应的时间步长。

看起来像这样

TimeGroup_45 = 

                                 time45: [34069x1 double]
                        Current_Shunt_5: [34069x1 double]
                         Voltage_Load_5: [34069x1 double]

这根本无法使用,因为我根本不知道我要查找的变量隐藏在原始数据中包含的 100 个结构中的何处。我只知道我正在寻找 'Current_Shut_3' 例如!

必须有一种方法可以让我执行以下操作

for all variables in Work space
      I_S3 = Find(Current_Shut_3)
end for

基本上我不想手动点击每个结构来找到我的变量,只想将它保存在正常时间序列中而不是隐藏在随机结构中!关于如何做的任何建议?必须有办法!

我试过使用 'whos' 命令,但没有成功,因为它只是 returns 工作区中存储结构的列表。我无法将该文本转换为变量并告诉它搜索所有字段。 谢谢guys/girls!

这是一个很好的例子,说明为什么当有足够的存储方法不需要代码体操来取回数据时,为什么不应该迭代变量名。如果你能改变这个,那就去做吧,甚至不用费心阅读这个答案的其余部分。

由于所有内容显然都包含在一个 *.mat 文件中,因此指定一个输出到 load so it's output into a unified structure and use fieldnames 以进行迭代。

使用下面的数据集,例如:

a1.Current_Shunt_1 = 1;
a2.Current_Shunt_2 = 2;
a5.Current_Shunt_5 = 5;
b1.Current_Shunt_5 = 10;
save('test.mat')

我们可以做到:

% Load data
alldata = load('test.mat');

% Get all structure names
datastructs = fieldnames(alldata);

% Filter out all but aXX structures and iterate through
adata = regexpi(datastructs, 'a\d+', 'Match');
adata = [adata{:}];

queryfield = 'Current_Shunt_5';
querydata = [];
for ii = 1:numel(adata)
    tmp = fieldnames(alldata.(adata{ii}));

    % See if our query field is present
    % If yes, output & break out of loop
    test = intersect(queryfield, tmp);  
    if ~isempty(test)
        querydata = alldata.(adata{ii}).(queryfield);
        break
    end
end

这给了我们:

>> querydata

querydata =

     5