2011-04-03 72 views
4

我想要矩阵的每个元素除以元素所属行的总和。例如:如何划分矩阵元素的行总和

[1 2  [1/3 2/3 
3 4] ==> 3/7 4/7] 

我该怎么办?谢谢。

+1

这种事情以前(同样的想法,不同的算术运算)有人问:如何通过划分矩阵元素列总结在MATLAB?](http://stackoverflow.com/questions/1773099/how-do-i-divide-matrix-elements-by-column-sums-in-matlab),[我怎样才能划分每行的矩阵由固定行?](http://stackoverflow.com/questions/4723824/how-can-i-divide-each-row-of-a-matrix-by-a-fixed-row) – gnovice 2011-04-04 14:09:30

回答

7

A = [1 2; 3 4]

诊断(1./sum(A,2))* A

2

我建议使用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.