How can I create a vector that shows the sum of the 60 values before each value of another vector?
1 次查看(过去 30 天)
显示 更早的评论
If a have this vector --> x=[0:1:1000] how can i create a vector of length 1000 too.. that is: first value 0, second 0+1.. value #59 from 0 to 59 and when the value is greater than 60 it shows the sum of the 60 values before for example the entry 100 should be from 40 to 100 etc..
1 个评论
Walter Roberson
2017-1-13
"60 values before" implies that 60 values are to be added. 40 to 100 is 61 values.
回答(3 个)
Walter Roberson
2017-1-13
Or you can cumsum() and subtract the value 60-ish earlier in the cumsum
1 个评论
Star Strider
2017-1-13
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 个评论
Image Analyst
2017-1-13
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 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!