Я предлагаю использовать bsxfun. Должно быть быстрее и эффективнее использовать память:
bsxfun(@rdivide, A, sum(A,2))
Обратите внимание, что ориентация vecor важна. Столбец разделит каждую строку матрицы, а вектор строки разделит каждый столбец.
Вот небольшое сравнение времени:
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
Результаты:
Elapsed time is 0.116672 seconds.
Elapsed time is 0.052448 seconds.