Method to compound daily data by n-days?

2 views (last 30 days)
Walter
Walter on 12 Sep 2012
Given:
[1 2 3 4 5 6] and n = 1,
return [1, 2, 3, 4, 5, 6]
given n=2, return: [1*2, 3*4, 5*6]
given n=3, return: [1*2*3, 4*5*6]
given n=4, return [1*2*3*4]
given n=5, return [1*2*3*4*5]
given n=6, return [1*2*3*4*5*6]
not sure what to call this algorithm, but can anyone think of a clever way to do it?

Answers (2)

Yi Sui
Yi Sui on 12 Sep 2012
function re = foo(x,n)
len = length(x);
seg = floor(len/n);
res = mod(len,n);
x2 = mat2cell(x,1,[ones(1,seg).*n res]);
re = cellfun(@prod,x2);
re = re(1:end-1);

Andrei Bobrov
Andrei Bobrov on 12 Sep 2012
I = 1:6; % The initial array
out = nonzeros(prod(reshape([I,zeros(1,mod(-numel(I),n))],n,[])))';

Categories

Find more on Multidimensional Arrays in Help Center and File Exchange

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!