Я попробовал следующие варианты:
Ваш способ:
tic, for iter=1:100 M=rand(1000,1000); for i=1:1000 M(:,i)=M(:,i)/sum(M(:,i)); end; end;toc
Elapsed time is 4.650408 seconds.
Векторный вариант, без циклов... (который описан еще и здесь:
http://stackoverflow.com/questions/4521593/fast-technique-for-normalizing-a-matrix-in-matlab)
tic, for iter=1:100 M = rand(1000,1000); M=M./repmat(sum(M), [length(M), 1]); end; toc
Elapsed time is 9.929461 seconds.
Но, это все сделано в виртуальной машине, в Matlab 7.7.0 R2008b. Поэтому, возможно, что-то изменится на реальном железе?!
Есть еще в matlab функция normc, возможно ее функционал в последующих версиях изменился и она может выполнять такое преобразование матрицы.