如何从 matlab 中的结构字段名称生成变量?
How to generate variables from stucture field names in matlab?
假设我在工作区中有一个结构数据如下
data.a={'1','2'};
data.b=[1,2,3];
data.c='hello';
我需要在工作区中包含以下变量:
a={'1','2'};
b=[1,2,3];
c='hello';
请告诉我如何推进这项工作?
为什么我需要这样做(以防有更好的选择来实现我的要求):
我有大约 140 个 .mat 文件。现在,我需要替换所有这些 .mat 文件中的字符串。该字符串可以是字符串数组、元胞数组或独立变量的一部分。我 运行 为所有这些 mat 文件循环并按如下方式加载它们:
tempLoad=load('filename.mat');
然后我提取结构 tempLoad
的字段,它为我提供了 'filename.mat'
中的所有变量。然后我可以处理所有变量并替换错误字符串。现在,我需要以 精确格式 .
保存 'filename.mat'
我不能使用 save('filename.mat','tempLoad')
或简单地 save('filename.mat')
因为变量的原始存储不是由它们维护的。
所以我需要将tempLoad
的所有字段都转换成变量,然后清除tempLoad
,然后调用save
函数。
您可以将结构tempLoad
保存到'filename.mat'
,而无需使用'-struct'
格式更改mat文件的结构:
save( 'filename.mat', '-struct', 'tempLoad' );
有关详细信息,请参阅 doc save
。
您也可以考虑使用 matfile
对象来访问保存的 matfile 并直接更新特定字符串,而无需每次 loading/saving 整个文件。
为了保存,您是否尝试过使用 -struct 参数:
matData = load ( 'filename.mat' );
save ( 'filename2.mat', '-struct', 'matData' )
这应该允许您将原始结构保存回文件。根据你所说的,我假设这是真正的问题...
我认为其他答案可能对您的问题有所帮助。如果您仍然真的想从字段中保存新变量,那么您可以使用
f = fieldnames(data);
for ii = 1:numel(f)
eval([f{ii} ' = data.' f{ii}]);
end
请注意,如果您正在使用它,there is probably a better way 考虑您要解决的问题。
假设我在工作区中有一个结构数据如下
data.a={'1','2'};
data.b=[1,2,3];
data.c='hello';
我需要在工作区中包含以下变量:
a={'1','2'};
b=[1,2,3];
c='hello';
请告诉我如何推进这项工作?
为什么我需要这样做(以防有更好的选择来实现我的要求):
我有大约 140 个 .mat 文件。现在,我需要替换所有这些 .mat 文件中的字符串。该字符串可以是字符串数组、元胞数组或独立变量的一部分。我 运行 为所有这些 mat 文件循环并按如下方式加载它们:
tempLoad=load('filename.mat');
然后我提取结构 tempLoad
的字段,它为我提供了 'filename.mat'
中的所有变量。然后我可以处理所有变量并替换错误字符串。现在,我需要以 精确格式 .
'filename.mat'
我不能使用 save('filename.mat','tempLoad')
或简单地 save('filename.mat')
因为变量的原始存储不是由它们维护的。
所以我需要将tempLoad
的所有字段都转换成变量,然后清除tempLoad
,然后调用save
函数。
您可以将结构tempLoad
保存到'filename.mat'
,而无需使用'-struct'
格式更改mat文件的结构:
save( 'filename.mat', '-struct', 'tempLoad' );
有关详细信息,请参阅 doc save
。
您也可以考虑使用 matfile
对象来访问保存的 matfile 并直接更新特定字符串,而无需每次 loading/saving 整个文件。
为了保存,您是否尝试过使用 -struct 参数:
matData = load ( 'filename.mat' );
save ( 'filename2.mat', '-struct', 'matData' )
这应该允许您将原始结构保存回文件。根据你所说的,我假设这是真正的问题...
我认为其他答案可能对您的问题有所帮助。如果您仍然真的想从字段中保存新变量,那么您可以使用
f = fieldnames(data);
for ii = 1:numel(f)
eval([f{ii} ' = data.' f{ii}]);
end
请注意,如果您正在使用它,there is probably a better way 考虑您要解决的问题。