Sum of previous elements in a matrix(dynamic way)

34 次查看(过去 30 天)
Hi, let's say I have the following vector matrix: A=[1 2 3; 4 5 6;7 8 9;10 11 12];
I'm looking for a dynamic way to sum the previous elements(Matrix B the results). I would like to have the variable L to do that.
Example 1: L=1 means I won't to sum all element with their previous, wich give the following result:
B=[5 7 9;11 13 15;17 19 21]
Example 2: L=2 means I won't to sum all element with their 2 previous elements, wich give the following result:
B=[12 15 18;21 24 27]
L need to be dynamic.
A concrete example would be appreciate a an awnser.
Thank you in adavance,

采纳的回答

Matt Fig
Matt Fig 2012-11-27
编辑:Matt Fig 2012-11-27
Say your matrix is like:
A = [1 2 3;
4 5 6;
7 8 9;
10 11 12;
13 14 15;
16 17 18];
% Now find the solution.
L = 3; % This is dynamically set on 1<L<=M.
[M,N] = size(A);
B = zeros(M-L+1,N);
for ii = 1:M-L+1
B(ii,:) = sum(A(ii:ii+L-1,:));
end
.
.
.
.
EDIT
Note that this is exactly what the FILTER function can do:
B = filter(ones(1,L),1,A);
B = B(L:end,:)
  3 个评论
Matt Fig
Matt Fig 2012-11-27
Or, a simpler function based on my edit above:
function B = spec_fun(A,L);
% Help
% check A is m-by-n,L is in range, etc.
B = filter(ones(1,L),1,A);
B = B(L:end,:);

请先登录,再进行评论。

更多回答(2 个)

Azzi Abdelmalek
Azzi Abdelmalek 2012-11-27
编辑:Azzi Abdelmalek 2012-11-27
A=[1 2 3; 4 5 6;7 8 9;10 11 12];
out=A(1:end-1,:)+A(2:end,:)

Walter Roberson
Walter Roberson 2012-11-27
编辑:Walter Roberson 2012-11-27
T = cumsum(A);
T(L+1:end,:) - T(1:end-L)

类别

Help CenterFile Exchange 中查找有关 Get Started with MATLAB 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by