加快图形中的采样

时间:2019-05-02 21:47:11

标签: python graph networkx numba

我最近一直在使用Python进行图采样。我的工作示例如下:

for enx, wlen in enumerate(wlen_dist):
    for j in range(wlen):
        node_container = queue.Queue(maxsize=200000000)
        node_container.put(node_name)
        tmp_walk = [] # [node_name]
        while not node_container.empty():
            nod = node_container.get()
            neighs = list(network.neighbors(nod))
            tar = random.choice(neighs)
            node_container.put(tar)
            if len(tmp_walk) > enx+1:
                break
            tmp_walk.append(tar)
       some_container.append(tmp_walk)

其中,wlen是长度为enx的路径的样本数,我只是将步行信息保存到some_container(在这里并不重要)。 wlen_dist例如:

[1000,500,100]
< p>并且在此,获得1000个长度为2的步行的样本,500个长度为3的步行和100个长度为4的步行。 networkx是networkX图。 我想知道,如何加快这样的代码的速度(我是这一部分的新手)。

我的想法:

  1. 使用Numba并将各个步道包装成方法

  2. 以某种方式使用Cython

  3. 将其全部用C ++重写并以某种方式调用

我很高兴有任何想法和反馈,谢谢!

1 个答案:

答案 0 :(得分:0)

图嵌入中经常使用的一种想法是重用随机游走的部分:

如果您有随机游走访问节点a_1, a_2, a_3,则可以将其视为一个长度为3的随机游走和2个长度为2的随机游走(a_1, a_2a_2, a_3)。

这可以推广到更长的步行,因此长度为4的随机步行包含2个长度为3的随机步行和3个长度为2的随机步行。