MATLAB: I would like to filter out some vectors based on a percent of aggregate

time series filtering & manipulation

I would like to filter some time series based on their weight of the overall aggregate. The weights are to be calculated based on the derived aggregate/components of the second last element in each vector (x1=20, x2=2, x3=62) The end result would be to extract the complete time series vectors satisfying the threshold. I would also appreciate suggested improvements to the code:
Threshold = *.2*
x1=[5 10 20 15 40 20 25]';
x2=[8 25 15 50 41 2 15]';
x3=[32 42 30 52 33 62 77]';
x=[x1 x2 x3];
sumx=sum(x')';
sumx=[sumx sumx sumx];
perx=x./sumx
perx=perx(4,:);
perx =
0.2381 0.0238 0.7381
Here x2 should be deleted since it falls below the threshold and a new object containing x1 and x3 vectors should get created.
x=[x1 x3];

Best Answer

See if this is what you want:
thresholdPercent = 0.2
x1=[5 10 20 15 40 20 25]';
x2=[8 25 15 50 41 2 15]';
x3=[32 42 30 52 33 62 77]';
% Sum them up
sumx = sum([x1,x2,x3], 2)
x=[];
% Get the value that each column will be compared to.
Threshold = thresholdPercent * sumx(end-1)
% Tack on x1 if it's above the threshold.
if x1(end-1) > Threshold
fprintf('Adding on x1:\n');
x = [x, x1]
end
% Tack on x2 if it's above the threshold.
if x2(end-1) > Threshold
fprintf('Adding on x2:\n');
x = [x, x2]
end
% Tack on x3 if it's above the threshold.
if x3(end-1) > Threshold
fprintf('Adding on x3:\n');
x = [x, x3]
end
% Get the means:
meanAcrossColumns = mean(x, 2)