Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to sum all other rows in MATLAB

Tags:

matrix

sum

matlab

I am still learning some of the advanced features in MATLAB.

I have a 2D matrix and I want to sum all rows, except for for i.

eg

1 1 1
2 2 2
4 4 4

say i = 2, I want to get this:

5 5 5

I can do it by summing all the rows, then subtracting row i, but I want to know if there is a faster way using MATLAB's indexing/selection syntax.

like image 768
ljbade Avatar asked Dec 08 '22 19:12

ljbade


2 Answers

It seems that summing all the rows, then subtracting row i, is much faster tough:

A=rand(500);
n = randi(500);
tic
for i=1:1e3
%sum(A([1:n-1 n+1:end], :));
sum(A)-A(n,:);
end
toc

     Elapsed time is 0.162987 seconds.

A=rand(500);
n = randi(500);
tic
for i=1:1e3
sum(A([1:n-1 n+1:end], :));
end
toc

     Elapsed time is 1.386113 seconds.
like image 138
bla Avatar answered Dec 21 '22 12:12

bla


To add to the performance considerations of previous authors. The solution by nate is faster, because it does not use complex matrix indexing of the second method. Complex matrix/vector indexing is very inefficient in MATLAB. I suspect this is the same problem with indexing as the one described in the cited question.

Consider the following simple tests, following the previous framework:

A=rand(500);
n = randi(500);
tic
for i=1:1e3
    B=sum(A(:, :));
end
toc
Elapsed time is 0.747704 seconds.

tic
for i=1:1e3
    B=sum(A(1:end, :));
end
toc
Elapsed time is 5.476109 seconds.   % What ???!!!

tic
id = [1:n-1 n+1:500];
for i=1:1e3
    B=sum(A(id, :));
end
toc
Elapsed time is 5.449064 seconds.
like image 40
angainor Avatar answered Dec 21 '22 11:12

angainor