【发布时间】:2023-03-24 18:36:01
【问题描述】:
我最近一直在使用 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]
在这里,获得了 1000 个长度为 2 的步行样本、500 个长度为 3 和 100 个长度为 4 的样本。 networkx 是一个 networkX 图。 我想知道,如何加速这样的代码(我是这部分的新手)。
我的想法:
使用 Numba 并将各个步道包装到一个方法中
以某种方式使用 Cython
用 C++ 全部重写并以某种方式调用它
如果有任何想法和反馈,我会很高兴,谢谢!
【问题讨论】:
-
线程是加速它的一种简单方法,因为您有一个可以并行完成的任务列表。
-
您是否考虑过将较长步行的部分重复用于较短的步行?例如。一个 3 步的随机游走包括两个 2 步的随机游走?
-
谢谢,你的意思是某种形式的缓存吧?这是个好主意,谢谢!
-
忘记了,另一个对我有用的关于使用
networkx加速我的python代码的想法是PyPy(不需要更改你的代码)
标签: python graph networkx numba