_calculate_random_walk_laplacian 计算给定邻接矩阵的随机游走拉普拉斯矩阵(Random Walk Laplacian)

    def _calculate_random_walk_laplacian(self, adj):
        adj = sp.coo_matrix(adj)
        d = np.array(adj.sum(1))
        isolated_point_num = np.sum(np.where(d, 0, 1))
        d_inv = np.power(d, -1).flatten()
        d_inv[np.isinf(d_inv)] = 0.
        d_mat_inv = sp.diags(d_inv)
        random_walk_mx = sp.eye(adj.shape[0]) - d_mat_inv.dot(adj).tocoo()
        return random_walk_mx, isolated_point_num

这段代码定义了一个方法 _calculate_random_walk_laplacian,用于计算给定邻接矩阵的随机游走拉普拉斯矩阵(Random Walk Laplacian),并计算孤立点的数量。

def _calculate_random_walk_laplacian(self, adj):

定义了一个方法 _calculate_random_walk_laplacian,接收一个参数 adj,表示邻接矩阵。

adj = sp.coo_matrix(adj)

将邻接矩阵 adj 转换为 SciPy 的 COO(Coordinate list)格式的稀疏矩阵。这种格式适合存储稀疏矩阵,并在计算中具有高效性。

d = np.array(adj.sum(1))

计算每个节点的度(degree),即每行的元素和。生成一个一维的 NumPy 数组 d,其中每个元素表示对应节点的度。

isolated_point_num = np.sum(np.where(d, 0, 1))

计算孤立点的数量。np.where(d, 0, 1) 生成一个布尔数组,对于度为零的节点,数组值为 1;否则为 0。np.sum 计算这些值的总和,从而得到孤立点的数量。

d_inv = np.power(d, -1).flatten()

计算度的逆(inverse),即 d 中每个元素的倒数。np.power(d, -1) 计算度的逆,flatten() 将其转换为一维数组。对于度为零的节点,这里会得到无穷大值。

d_inv[np.isinf(d_inv)] = 0.

将逆中的无穷大值(由度为零的节点产生)设置为零,以避免在后续计算中出现无穷大或 NaN 值。

d_mat_inv = sp.diags(d_inv)

创建一个对角矩阵 d_mat_inv,其对角元素为 d_inv。这个对角矩阵将用于计算随机游走拉普拉斯矩阵。

random_walk_mx = sp.eye(adj.shape[0]) - d_mat_inv.dot(adj).tocoo()

计算随机游走拉普拉斯矩阵。具体步骤如下:

  1. sp.eye(adj.shape[0]) 创建一个单位矩阵,大小与邻接矩阵相同。
  2. d_mat_inv.dot(adj) 计算逆度对角矩阵与邻接矩阵的乘积。
  3. .tocoo() 将结果转换为 COO 格式的稀疏矩阵。

return random_walk_mx, isolated_point_num

返回计算得到的随机游走拉普拉斯矩阵 random_walk_mx 和孤立点数量 isolated_point_num

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值