前言
在图神经网络的代码中我们经常会对稀疏矩阵进行归一化。下面代码以归一化为例。
1.引入库
代码如下(示例):
import numpy as np
import scipy.sparse as sp
2.Row-normalize sparse matrix
代码如下(示例):
def normalize(mx):
'''Row-normalize sparse matrix'''
# 矩阵行求和
rowsum = np.array(mx.sum(1))
# 求和的-1次方
r_inv = np.power(rowsum.astype(float), -1).flatten()
# 如果是inf,转换成0
r_inv[np.isinf(r_inv)] = 0
# 构建对角形矩阵
r_mat_inv = sp.diags(r_inv)
# 构造D-I*A, 非对称方式, 简化方式
mx = r_mat_inv.dot(mx)
return mx
示例:
mx = sp.csr_matrix([[0,1,0,1],[0,0,0,1],[1,0,0,1],[0,1,0,0]])
print(mx.A)
print(normalize(mx.A))
(DB-chun) C:\Users\渺渺夕\Desktop\GNN_learning>D:/Anaconda3/envs/DB-chun/python.exe c:/Users/渺渺夕/Desktop/GNN_learning/pygcn/utility.py
tensor([[0., 1., 0., 1.],
[0., 0., 0., 1.],
[1., 0., 0., 1.],
[0., 1., 0., 0.]])
[[0. 0.5 0. 0.5]
[0. 0. 0. 1. ]
[0.5 0. 0. 0.5]
[0. 1. 0. 0. ]]
注:
ValueError: Integers to negative integer powers are not allowed.
在power时,如果你的矩阵不是浮点型会报错