我目前正在处理大量使用长模拟(3天+)创建的.mat文件(300+)。
这些mat文件中的每一个都包含几个变量,每个变量都以它们在网格上的位置命名(是的,它们是用eval
创建的。)
因此我创建了一个按顺序打开每个文件的脚本
s = what(pwd);
s = s.mat;
for i=1:length(s)
data = open(sprintf('%s',s{i,:}));
% here goes what I would like to do
end
我现在要做的是提取适合某种模式的数据组件的当前名称。
具体来说,我知道在data
中有一个名为coef_%i_%i
的向量,我想将其隔离并将其分配给多维数组。
第二部分我知道怎么做,我可以扫描_
字符的变量名,隔离整数并将矢量分配到数组中的适当位置。
我的问题是:
vectorname = extractname('data.coef*');
?答案 0 :(得分:3)
假设你有类似的东西:
clear data
% create a dummy field
name = sprintf ( 'coef_%i_%i', randi(100,[2 1]) );
% a data struct with a field which starts "coef*"
data.(name) = rand;
% and your data field may contain some other fields?
data.other = [];
然后,您可以提取出包含coef字符串
的字段function output = extractname ( data )
%extract the fieldnames from data:
fn = fieldnames(data);
% find all that have coef in them
index = cellfun(@isempty, strfind(fn,'coef'));
% remove any that dont have coef in them
fn(index) = [];
%You are then left with one(or more) that contain coef in the name:
output = fn;
end
如果您的数据结构包含可能在名称中的其他位置具有“coef”的字段,则需要通过它们并检查coef是否在开头。您还应该检查函数末尾是否找到了一个且只有一个字段。