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.
A =[1 2; 3 4]
diag(1./sum(A,2))*A
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With