我发现很难理解下面这段代码,它构造了一个给定稀疏矩阵的稀疏邻接矩阵。
# build symmetric adjacency matrix
adj = adj + adj.T.multiply(adj.T > adj) - adj.multiply(adj.T > adj)
这是我尝试过的:
adj =np.array([[2. , 0., 0. ],
[3. , 0. , 0. ],
[3. , 0. , 0. ]])
adjs=sp.coo_matrix(adj)
adjs.T.todense()
#matrix([[2., 3., 3.],
[0., 0., 0.],
[0., 0., 0.]])
adjs.T.multiply(adjs.T > adjs).todense()
#matrix([[0., 3., 3.],
[0., 0., 0.],
[0., 0., 0.]])
q= adjs+adjs.T.multiply(adjs.T > adjs)+adjs - adjs.multiply(adjs.T > adjs)
q.todense()
matrix([[4., 3., 3.],
[6., 0., 0.],
[6., 0., 0.]])
在输出中,对角线不为零。
代码是 Kipf 的图卷积网络论文的一部分,它位于 setup.py 文件中:
https://github.com/yao8839836/text_gcn/blob/b230e8083f838953646a9034b60abc5f69b062f6/utils.py#L176
我不明白该代码如何使矩阵对称。谁能给个解释?
此问题已在 Unexpected angle bracket "<" in numpy multiply() of matrices
之前提出但是没有解释该代码是如何工作的。在我的示例中,我不知道为什么我的对角线元素不为零。