Algorithm 涉及任意两个节点的三角形数
假设我有一个邻接矩阵A,它表示一个未加权的无向图 我想计算B,其中B[I][j]是包含节点I和j的闭合三角形的数量Algorithm 涉及任意两个节点的三角形数,algorithm,numpy,graph,theano,Algorithm,Numpy,Graph,Theano,假设我有一个邻接矩阵A,它表示一个未加权的无向图 我想计算B,其中B[I][j]是包含节点I和j的闭合三角形的数量 有没有一种方法可以仅仅使用线性代数从a计算B?我想在theano中实现这一点。假设I和j彼此相邻。然后,包含这两个顶点的三角形数是连接到这两个顶点的其他顶点数。即 B_i,j = Sum_k (if A_i,k=1 and A_k,j=1 then 1 else 0) 这假设邻接矩阵的对角线为0。布尔表达式可以转换为单个乘积,因为我们只使用0和1: B_i,j = Sum_k A
有没有一种方法可以仅仅使用线性代数从a计算B?我想在theano中实现这一点。假设
I
和j
彼此相邻。然后,包含这两个顶点的三角形数是连接到这两个顶点的其他顶点数。即
B_i,j = Sum_k (if A_i,k=1 and A_k,j=1 then 1 else 0)
这假设邻接矩阵的对角线为0。布尔表达式可以转换为单个乘积,因为我们只使用0和1:
B_i,j = Sum_k A_i,k * A_k,j
这看起来很像矩阵乘法,实际上是:
B = A^2
然而,我们仍然假设i
和j
是连接的。为了将这个假设整合到最终的公式中,我们只需将B
的每个分量乘以相应的邻接矩阵项即可。这会将未连接i
和j
的所有条目设置为零。最后的公式是:
B = (A^2) * A,
其中,
^2
是自身的矩阵积,*
是分量乘法。假设i
和j
彼此相邻。然后,包含这两个顶点的三角形数是连接到这两个顶点的其他顶点数。即
B_i,j = Sum_k (if A_i,k=1 and A_k,j=1 then 1 else 0)
这假设邻接矩阵的对角线为0。布尔表达式可以转换为单个乘积,因为我们只使用0和1:
B_i,j = Sum_k A_i,k * A_k,j
这看起来很像矩阵乘法,实际上是:
B = A^2
然而,我们仍然假设i
和j
是连接的。为了将这个假设整合到最终的公式中,我们只需将B
的每个分量乘以相应的邻接矩阵项即可。这会将未连接i
和j
的所有条目设置为零。最后的公式是:
B = (A^2) * A,
其中,
^2
是其自身的矩阵积,*
是分量乘法。太棒了!我检查了几个玩具的例子,它的工作。谢谢你写得这么清楚。太棒了!我检查了几个玩具的例子,它的工作。谢谢你写得这么清楚。