Blockwise matrix addition without using more than 2 dimensions and cycles

Dear All,
I am looking for a solution of blockwise matrix addition. To give a simple example, let us have
A = [1,2,3,4,5,6,7,8; 9,10,11,12,13,14,15,16];
I would like to get the result:
B = [1+5,2+6,3+7,4+8; 9+13,10+14,11+15,12+16];
The evident solution which comes to mind would be:
sum(reshape(A,2,4,2), 3);
However, I am using a third-party tool with special variables for which 3D arrays are not implemented. My next idea was to use:
B = zeros(2,4);
for i = 1:4
B(:,i) = sum(A(:, i:4:end), 2);
end
If possible I am looking for functions that can solve this without using a cycle as in my application the number of columns will reach hundreds and thousands. I thank for in advance for anyone's help.

 Accepted Answer

This is awkward, but it does what you want. I think there is probably a better way.
% Inputs
A = [1,2,3,4,5,6,7,8; 9,10,11,12,13,14,15,16];
groupSize = 4;
% Output
B = movsum(A,[0,groupSize],2) - movsum(A,[0,groupSize-1],2) + A;
B = B(:,1:groupSize)
B = 2×4
6 8 10 12 22 24 26 28

1 Comment

Thanks for your effort, it does look good but I'll have to test it for some other cases.
In the mean time I managed to solve my problem by managing a conversion between types and using the original 3D version, but I did not know about the movsum() function before so you have given me food for thought, thank you!

Sign in to comment.

More Answers (1)

A = [1,2,3,4,5,6,7,8; 9,10,11,12,13,14,15,16];
B = A(:,1:end/2) + A(:,(end/2)+1:end)
B = 2×4
6 8 10 12 22 24 26 28

1 Comment

Thank you, I was a bit over-complicating it because of the context of my problem which I have not shared. However, I am still looking for a more general solution, e.g. I want to get a 2x20 matrix from a 2x2000 matrix, by summing the (:,1:20), (:,21:40) ... (:,1981:2000) submatrices without the use of a cycle.

Sign in to comment.

Categories

Find more on Programming in Help Center and File Exchange

Products

Release

R2022b

Community Treasure Hunt

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

Start Hunting!