Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何找出matlab变量存储在哪个结构中?_Matlab_Matlab Struct - Fatal编程技术网

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

如何找出matlab变量存储在哪个结构中?,matlab,matlab-struct,Matlab,Matlab Struct,我有.mat格式的原始数据。数据由一组名为“TimeGroup_XX”的结构组成,其中XX只是一个随机数。这些结构中的每一个都包含一组信号及其相应的时间步长 看起来像这样 TimeGroup_45 = time45: [34069x1 double] Current_Shunt_5: [34069x1 double] Voltag

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

看起来像这样

TimeGroup_45 = 

                                 time45: [34069x1 double]
                        Current_Shunt_5: [34069x1 double]
                         Voltage_Load_5: [34069x1 double]
这是无法使用的,因为我根本不知道我正在寻找的变量隐藏在原始数据中包含的100个结构中的什么地方。我只知道我正在寻找“当前关闭3”的例子

必须有一种方法可以让我做到以下几点

for all variables in Work space
      I_S3 = Find(Current_Shut_3)
end for
基本上,我不想手动点击每一个结构来找到我的变量,只希望它保存在一个正常的时间序列中,而不是隐藏在一个随机结构中!有什么建议吗?一定有办法

我尝试使用“whos”命令,但没有成功,因为它只返回工作区中存储的结构列表。我无法将该文本转换为变量并告诉它搜索所有字段。
谢谢大家

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

由于所有内容显然都包含在一个
*.mat
文件中,因此请指定一个输出,以便将其输出到统一的结构中并用于迭代

例如,使用以下数据集:

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

这是动态变量不好的原因之一。问题的主要来源是时间组的生成,如果你能改变它,你就解决了这个问题,以及所有未来的问题。替代方案是什么?取决于数据,但单元格数组就是其中之一。不用在变量名中使用索引,只需TimeData{5}就可以了,这是一个很好的答案!很好!非常感谢你,你真是个救命恩人。不幸的是,我没有控制原始数据的格式,但是为了将来的参考,什么是将大量测量数据导入matlab的最佳格式?matlab是基于数组的,尽可能利用它。类似于
TimeGroup(45)。Voltage\u Load(5)
更易于迭代,对您和其他阅读代码的人都更有意义。