我正在学习构建GCN,现在我实现了下面的代码。
我在jupyter笔记本上运行它。
在[1]
import numpy as np
from networkx import karate_club_graph, to_numpy_matrix
zkc = karate_club_graph()
order = sorted(list(zkc.nodes()))
A = to_numpy_matrix(zkc, nodelist=order)
I = np.eye(zkc.number_of_nodes())
A_hat = A + I
D_hat = np.array(np.sum(A_hat, axis=0))[0]
D_hat = np.matrix(np.diag(D_hat))
在[2]
X = np.matrix([
[i, -i]
for i in range(A.shape[0])
], dtype=float)
在[3]
W = np.matrix([
[1, -1],
[-1, 1]
])
在[4]
W_1 = np.random.normal(
loc=0, scale=1, size=(zkc.number_of_nodes(), 4))
W_2 = np.random.normal(
loc=0, size=(W_1.shape[1], 2))
在[5]
def gcn_layer(A_hat, D_hat, X, W):
return D_hat**-1 * A_hat * X * W
H_1 = gcn_layer(A_hat, D_hat, I, W_1)
H_2 = gcn_layer(A_hat, D_hat, H_1, W_2)
output = H_2
在[6]
feature_representations = {
node: np.array(output)[node]
for node in zkc.nodes()}
这是所有的代码,我想创建这样的图形,但我不知道如何使用matplotlib上的数组来绘制它。谢谢你。
在此处输入图像描述
据我所知,您希望从feature_表示中绘制值,但问题是,在字典中,值是数组。为了使用matplotlib。pyplot。适当分散(https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.scatter.html),必须将字典转换为两个数组,这两个数组可以作为x和y参数传递。
可以在[7]单元格中尝试以下代码:
from matplotlib import pyplot as plt
arrays = feature_representations.values()
X = [el[0] for el in arrays]
Y = [el[0] for el in arrays]
plt.scatter(X, Y)
它给出以下输出: