将matlab表达式简化为矩阵形式

时间:2017-07-13 06:45:38

标签: matlab math matrix refactoring

我有这个函数来规范化矩阵(基本上将每个元素乘以一个值),我想知道如何摆脱这两个嵌套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

2 个答案:

答案 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);

希望这就是你要找的东西。