代码—— 利用邻接信息熵识别复杂网络中的重要节点

本文介绍了如何使用邻接信息熵来识别复杂网络中重要的节点,通过Matlab代码展示了计算方法,包括邻接矩阵处理、入度和出度的计算以及避免除以零问题的策略。
摘要由CSDN通过智能技术生成

题头,matlab代码尝试,共勉。有误请指正

先感谢7:45am大佬的文献提供和笔记。以下为其文章

论文笔记—— 利用邻接信息熵识别复杂网络中的重要节点-CSDN博客

(该文章有举例理解定义和算法步骤,本文不再叙述。)


相关定义及公式

A_{i}=\theta *\sum_{j\in \Gamma(i) }k_{j_{in}}+(1-\theta)*\sum_{j\in \Gamma(i) }k_{j_{out}}

p_{i_j}= \frac { k _ { i } } { A _ { j } } , j \in \Gamma _ { i }

E _ { i } = \sum _ { j \in I _ { i } } | ( - P _ { i_j } \log _ { 2 } P _ { i_j } ) |

其中k_{j_{in}}是从节点i指向节点j的边数,k_{j_{out}}是从节点j指向节点i的边数,p_{i_{j}}为节点i将被其邻居j选择的概率,E_i为邻接信息熵。


下列代码中,Link为有向图的邻接矩阵,若为有向图可用

A = adjacency(G, 'weighted');  %获取邻接矩阵
function Hi = Hmessage(Link, lambda)
    degrees_in = sum(Link, 1)'; % 计算每个节点的入度
    degrees_out = sum(Link, 2); % 计算每个节点的出度
    Hi = zeros(1, size(Link, 2));
    
    % 计算节点邻接度K
    K = lambda * degrees_in + (1 - lambda) * degrees_out;
    
    for i = 1:size(Link, 2)
        temp_in = find(Link(:, i))'; % 节点i的入度邻接节点
        temp_out = find(Link(i, :)); % 节点i的出度邻接节点
        Kwj = 0; % 节点i的入节点度值
        Kjw = 0; % 节点i的出节点度值
        for j = 1:size(temp_in, 2)
            Kwj = Kwj + K(temp_in(j));
        end
        for j = 1:size(temp_out, 2)
            Kjw = Kjw + K(temp_out(j));
        end
        Q(i) = Kwj * lambda + (1 - lambda) * Kjw;
    end
    
    for i = 1:size(Link, 2)
        temp_in = find(Link(:, i))'; % 节点i的入度邻接节点
        temp_out = find(Link(i, :)); % 节点i的出度邻接节点
        temp = unique([temp_out temp_in]); % 节点i的邻接节点
        for j = 1:size(temp, 2)
            if Q(temp(j)) ~= 0 % 避免除以0的情况
                p = K(i) / Q(temp(j));
                Hi(i) = p * log2(p) + Hi(i);
            end
        end
        Hi(i) = -Hi(i);
    end
    
    Hi = abs(Hi);
end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值