如何找出我的 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
我有 .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