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

Number of triangles involving any two nodes

假设我有一个邻接矩阵 A 表示未加权的无向图。

我想计算 B,其中 B[i][j] 是包含节点 ij.

的闭合三角形的数量

有没有办法只使用线性代数从 A 计算 B?我想在 theano 中实现它。

假设ij相邻。然后,包含两者的三角形的数量是连接到它们两者的其他顶点的数量k。即

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

但是,我们仍然假设ij是相连的。要将此假设整合到最终公式中,我们只需将 B 的每个分量乘以邻接矩阵的相应条目即可。这会将 ij 未连接的所有条目设置为零。所以最后的公式是:

B = (A^2) * A,

其中 ^2 是矩阵与自身的乘积,* 是分量乘法。