我正在研究复现Ripple Walk Sampler。这是一种从目标图中提取子图的算法。
在这里,我们需要将s和r设置为参数。s是子图的大小,r是扩展比率,即当前步骤中要采样的邻居节点的比率。
对于子图Gk,它将以随机节点vs初始化,然后沿着节点之间的连接进行扩展。
经过多次扩展,将返回一个大小为s的子图。在每次扩展期间,邻居集包含潜在的要采样的节点。
然后将邻居集中的r个节点添加到当前子图中。
以下是原始伪代码和采样过程示例。
在这里,我们需要将s和r设置为参数。s是子图的大小,r是扩展比率,即当前步骤中要采样的邻居节点的比率。
对于子图Gk,它将以随机节点vs初始化,然后沿着节点之间的连接进行扩展。
经过多次扩展,将返回一个大小为s的子图。在每次扩展期间,邻居集包含潜在的要采样的节点。
然后将邻居集中的r个节点添加到当前子图中。
以下是原始伪代码和采样过程示例。
这是我的尝试:
import random
import networkx as nx
import numpy as np
m = np.matrix([
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 1, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 1, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 1, 0, 0]])
G = nx.from_numpy_matrix(m) #target graph
r = 0.5 #expansion ratio
S = 4 #subgraph size
Gk = nx.DiGraph() #initialize subgraph
Vk = [] #initialize nodes
vs = random.randint(0, G.size()) #randomly select the initial node from G
Gk.add_node(vs) #add vs to Gk
while len(Vk) < S:
#get neighbor nodes set of Vk
NS = [n for n in G.neighbors(vs)]
print(NS)
#randomly select r of nodes in NS, add them into the Vk
for nodes in NS:
if random.random() < r:
Vk.append(nodes)
我在伪代码的第四行的逻辑上遇到了困难,那部分是获取Vk的邻居集合。 我知道这段代码是错误的,但我应该如何实现这一部分呢?
有人能帮我修复这个问题吗?任何建议都将不胜感激。