Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to divide matrix elements by sum of row

Tags:

matlab

I want to divide each element of a matrix by the sum of the row that element belongs to. For example:

[1 2      [1/3 2/3 
 3 4] ==>  3/7 4/7]

How can I do it? Thank you.

like image 613
Martin08 Avatar asked Dec 21 '22 15:12

Martin08


2 Answers

A =[1 2; 3 4]

diag(1./sum(A,2))*A

like image 172
Jirka cigler Avatar answered Jan 08 '23 13:01

Jirka cigler


I suggest using bsxfun. Should be quicker and more memory efficient:

bsxfun(@rdivide, A, sum(A,2))

Note that the vecor orientation is important. Column will divide each row of the matrix, and row vector will divide each column.

Here's a small time comparison:

A = rand(100);

tic
for i = 1:1000    
   diag(1./sum(A,2))*A;
end
toc

tic
for i = 1:1000    
   bsxfun(@rdivide, A, sum(A,2));
end
toc

Results:

Elapsed time is 0.116672 seconds.
Elapsed time is 0.052448 seconds.
like image 25
orli Avatar answered Jan 08 '23 14:01

orli