# How can I create a vector that shows the sum of the 60 values before each value of another vector?

2 views (last 30 days)

Show older comments

##### 1 Comment

Walter Roberson
on 13 Jan 2017

"60 values before" implies that 60 values are to be added. 40 to 100 is 61 values.

### Answers (3)

Walter Roberson
on 13 Jan 2017

Or you can cumsum() and subtract the value 60-ish earlier in the cumsum

##### 1 Comment

Star Strider
on 13 Jan 2017

I’m not certain a vector is possible, but a matrix approach could be.

Consider the rows of ‘out’:

N = 5; % RowLength (Use: 60)

L = 10; % Vector Length (Use: 1000)

out = hankel(1:N, N:L);

out(2:end,:) = cumsum(out(2:end,:),2);

I used the example with a short vector to illustrate the approach. Experiment to get the result you want.

##### 0 Comments

Image Analyst
on 13 Jan 2017

Here's a way to do it in one line of code with conv().

out = conv(x, [zeros(1,59), ones(1,60)], 'same')

To prove it, here's a full demo where I compare that method to a simple intuitive for loop to prove that it's the same.

x=[0:1:1000]

kernel = [zeros(1,59), ones(1,60)]

out = conv(x, kernel, 'same')

% Compare with for loop method:

for k = 1 : length(x)

i2 = k;

i1 = max(1, i2 - 59);

outf(k) = sum(x(i1:i2));

end

diffs = outf - out

maxDiff = max(diffs) % Should be 0

##### 0 Comments

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!