结构分别存储它们的字段,因此您必须将过滤器应用于每个字段.
例如,请考虑以下结构
%# a sample structure
dataFile.a_field = randn(20,1) + 1;
dataFile.b_field = num2str((1:20)','string %d'); %'
dataFile.c_field = rand(20,1);
%# find rows where 'a_field' is bigger than 2
idx = dataFile.a_field > 2;
现在,您有两个选项可以过滤其他字段:
1)structfun
使用STRUCTFUN在每个字段上应用过滤功能:
data2 = structfun(@(x) x(idx), dataFile, 'UniformOutput',false);
2)FOR循环动态字段名称
写一个显式的for循环,并使用dynamic field names访问每个:
fn = fieldnames(dataFile);
for i=1:numel(fn)
data2.(fn{i}) = dataFile.(fn{i})(idx);
end
3)cellarrays
%# cellarray
C = struct2cell(dataFile);
C = [num2cell(C{1}) cellstr(C{2}) num2cell(C{3})];
%# filter rows from all columns
idx = vertcat(C{:,1}) > 2;
C_filtered = C(idx,:)
在这种情况下的结果:
>> C_filtered
C_filtered =
[3.0034] ' string 5' [ 0.53406]
[2.4158] 'string 11' [ 0.18971]
[2.0289] 'string 13' [ 0.14761]
[ 2.458] 'string 14' [0.054974]
[2.7463] 'string 16' [ 0.56056]