4 %> @brief Group Aggregator - combines data rows outputting one row per group
6 properties(Access=
protected)
7 %> Temporary storage, released after @c use()
' d
9 %> Temporary storage, released after @c use()' d
17 o.classtitle = 'Group aggregator';
23 methods(Access=protected)
24 %> Abstract. Core. Task is to assign data properties of row @c no_out .
25 function o = process_group(o, idxs)
28 %> Needs to
pre-allocate the relevant row fields of @c outdata .
29 function o = dim_outdata(o, ng)
32 function out = do_use(o, data)
33 if isempty(data.groupcodes)
34 irerror('Dataset groupcodes is empty!');
37 % Really didn't make much of a difference, actually it seems that comparing strings is even faster
41 % Determines the groups
42 codes = unique(data.groupcodes);
45 % Prepares output dataset
46 o.outdata = data.copy_emptyrows();
48 o.outdata.groupcodes = cell(ng, 1);
49 o = o.dim_outdata(ng);
53 o.no_out = o.no_out+1;
55 % Half the bottleneck is here
56 idxs = find(strcmp(codes{i}, data.groupcodes)); % observation indexes
57 o.outdata.groupcodes{o.no_out} = o.indata.groupcodes{idxs(1)};
59 % The other half is here
60 o = o.process_group(idxs);
66 % Determines the groups
67 numbers = unique(data.groupnumbers);
70 % Prepares output dataset
71 o.outdata = data.copy_emptyrows();
73 o.outdata.groupcodes = cell(ng, 1);
74 o = o.dim_outdata(ng);
78 o.no_out = o.no_out+1;
79 idxs = find(numbers(i) == data.groupnumbers);
80 o.outdata.groupcodes{o.no_out} = o.indata.groupcodes{idxs(1)};
81 o.outdata.groupnumbers(o.no_out) = o.indata.groupnumbers(idxs(1));
82 o = o.process_group(idxs);
Pre-processing block base class.
Group Aggregator - combines data rows outputting one row per group.