符号网络中三角形个数及结构平衡三元组个数统计-【matlab代码实现】

最近在用matlab做实验,需要计算符号网络中的平衡三元组和不平衡三元组的个数,之前用过R做实验,R里面有现成的符号网络包signnet,里面有一个方法counted_signed_triangles(没记错是这个),但是matlab里面找了很久都没有找到这样的方法,于是就自己写了一个函数
功能:统计符号网络中的三角形个数,不同类型的符号三元组个数
输入:邻接矩阵,节点总数
输出:三角形总数,+++,++-,+--,---对应的三元组个数

function [triangles,ppp,ppn,pnn,nnn] = count_signed_triads(net,N)

triangles=0;
flag=zeros(N,N); % 判断是否已经检查过
ppp=0;
ppn=0;
pnn=0;
nnn=0;
for i=1:N
    nei_i=find(net(i,:)~=0); % i的所有邻居
    leni=length(nei_i);
    for j=1:leni
        nei_ij=nei_i(j); % i的邻居j
        if flag(i,nei_ij)==0
            nei_j=find(net(nei_ij,:)~=0); % j的所有邻居
            lenj=length(nei_j);
            for k=1:lenj
                nei_jk=nei_j(k); % j的邻居k
                if i~=nei_jk && net(i,nei_jk)~=0
                    triangles=triangles+1;
                    if net(i,nei_ij)+net(nei_ij,nei_jk)+net(nei_jk,i)==3
                        ppp=ppp+1;
                    elseif net(i,nei_ij)+net(nei_ij,nei_jk)+net(nei_jk,i)==1
                        ppn=ppn+1;
                    elseif net(i,nei_ij)+net(nei_ij,nei_jk)+net(nei_jk,i)==-1
                        pnn=pnn+1;
                    elseif net(i,nei_ij)+net(nei_ij,nei_jk)+net(nei_jk,i)==-3
                        nnn=nnn+1;
                    end
                end
            end
            flag(i,nei_ij)=1; % ij的边被标记过
            flag(nei_ij,i)=1;
            net(i,nei_ij)=0;  % 去掉已经统计过的ij边
            net(nei_ij,i)=0;
        end
    end
end
end

讨论的是无向图,有向图应该是类似的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值