我有这个函数来规范化矩阵(基本上将每个元素乘以一个值),我想知道如何摆脱这两个嵌套for循环并在所有矩阵运算中执行它?
function T = Normalize(trust, m)
T3 = sparse(trust(:, 1), trust(:, 2), trust(:, 3), m , m);
Outdegree = sum(T3, 1);
Indegree = sum(T3, 2)';
for i = 1:m
for j = 1:m
T3(i,j) = sqrt(Indegree(j) / (Indegree(j) + Outdegree(i))) * T3(i,j);
end
end
T = T3;
end
答案 0 :(得分:1)
用纸做完:
outdegree = repmat(outdegree,m,1)';
indegree = repmat(indegree,1,m)';
T3 = T3.*(sqrt(indegree./(indegree+outdegree)));
经过测试,它适用于我的示例。如果它对您有用,请告诉我
答案 1 :(得分:1)
取决于你的矩阵是多么稀疏,migth不值得它进行矢量化。 对于非常稀疏的矩阵,我会尝试使用非零元素:
[i,j,s] = find(T3)
T3_ = sqrt(Indegree(j) ./ (Indegree(j) + Outdegree(i))) .* s
T3 = sparse(i, j, T3_ , m , m);
希望这就是你要找的东西。