根据边修改邻接矩阵

Modifying adjacency matrix based on edges

我有图的邻接矩阵 H。我删除了第一行和最后一行和列以生成一个新矩阵 H1。在 H1 中,我想用每个顶点具有负号的边数替换对角线。图表、当前和期望的输出如下

import numpy as np
H = np.array([
    [0, 1, 0, 1, 0],
    [1, 0, 1, 1, 1],
    [0, 1, 0, 1, 1],
    [1, 1, 1, 0, 0],
    [0, 1, 1, 0, 0]
])

H1 = H[1:-1, 1:-1]
print([H1])

当前输出:

array([[0, 1, 1],
       [1, 0, 1],
       [1, 1, 0]])]

期望的输出:

array([[-2, 1, 1],
       [1, -2, 1],
       [1, 1, -2]])]

您可以使用 numpy.identity and numpy.ndarray.sum 来实现。即

>>> H1 - np.identity(3)*H1.sum(axis=1)
array([[-2.,  1.,  1.],
       [ 1., -2.,  1.],
       [ 1.,  1., -2.]])