我想将矩阵的每个元素除以元素所属的行的总和。例如:
[1 2 [1/3 2/3
3 4] ==> 3/7 4/7]
我该怎么办?谢谢。
答案 0 :(得分:8)
A = [1 2; 3 4]
DIAG(1./sum(A,2))* A
答案 1 :(得分: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.