Algorithm 涉及任意两个节点的三角形数

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,其中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_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
是其自身的矩阵积,
*
是分量乘法。

太棒了!我检查了几个玩具的例子,它的工作。谢谢你写得这么清楚。太棒了!我检查了几个玩具的例子,它的工作。谢谢你写得这么清楚。