我们说我有一个邻接矩阵 A ,代表一个未加权的无向图。
我想计算 B ,其中 B [ i ] [ j ]是数字包含节点 i 和 j 的封闭三角形。
有没有办法只使用线性代数从 A 计算 B ?我想在theano中实现这一点。
答案 0 :(得分:2)
假设j
和k
彼此相邻。然后,包含两者的三角形的数量是连接到它们的其他顶点B_i,j = Sum_k (if A_i,k=1 and A_k,j=1 then 1 else 0)
的数量。即。
B_i,j = Sum_k A_i,k * A_k,j
这假设邻接矩阵的对角线为0.布尔表达式可以转换为单个产品,因为我们只使用0和1:
B = A^2
这看起来非常像矩阵乘法,实际上它是:
i
但是,我们仍然认为j
和B
是相互关联的。为了将这个假设整合到最终公式中,我们只需要将i
的每个分量乘以邻接矩阵的相应条目。这会将所有条目设置为零,而j
和B = (A^2) * A,
未连接。所以最终的公式是:
^2
其中*
是自身的矩阵产品,userChoice = scnr.next().charAt(0);
是分量乘法。