How to make up the diagonal summation without for loop and with the fastest way!

A =
1 7 13
2 8 14
3 9 15
4 10 16
5 11 17
6 12 18
B =
1, (2+7), (3+8+13), (4+9+14), (5+10+15) ... (12+17), 18
How to make the B vector?
Vector-wise would be good to perform the enhancement of computational time?

More Answers (3)

A =[ 1 7 13
2 8 14
3 9 15
4 10 16
5 11 17
6 12 18]
[n,m]=size(A);
B=fliplr(A);
out=zeros(1,m+n-1);
for k=-n+1:m-1
out(k+n)=sum(diag(B,k));
end
out=fliplr(out)
Hyunchul, something like
fA = fliplr(A);
B = fliplr(arrayfun(@(i) sum(diag(fA,i)),-length(A(:,1))+1:length(A(1,:))-1));
And just for fun (requires Image Processing):
B = zeros(size(A));
B(1) = 1;
B2 = bwdist(B,'cityblock')+1;
v = accumarray(B2(:),A(:))
Use Azzi's solution.

Categories

Find more on Loops and Conditional Statements 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!