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.
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.
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.