I suggest using bsxfun. There should be a more efficient and effective memory:
bsxfun(@rdivide, A, sum(A,2))
Note that vector orientation is important. A column will split each row of the matrix, and a row vector will divide each column.
Here's a little 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.
source share