我正在写一篇关于流行病学的论文,我必须在时间网络中模拟 SI 流行病。在每个时间步,都有一个概率 ~ Bernoulli(beta) 在受感染节点和易感节点之间执行提取。我正在使用 np.random.binomial(size=whatever, n=1, p=beta) 让计算机做出决定。现在,我必须从每个节点开始,在同一个网络中模拟流行病。这应该重复 K 次以获得每个节点的一些统计相关结果,并且由于时间网络也是随机的,所以一切都应该重复 NET_REALIZATION 次。
因此,在 N = 100 的网络中,如果 K=500 且 NET=REALIZATION=500,则该流行病应该重复 25,000,000 次。如果 T=100,则意味着每组 SI 对有 2,500,000,000 次提取(当然随时间变化)。如果 beta 很小(通常是这种情况),这会导致计算非常耗时。如果你认为,对于我的电脑来说,伯努利提取需要 3.63 µs,这意味着我必须等待几个小时才能得到一些结果,这确实限制了我的论文的发展。问题是超过一半的时间都花在了随机抽取上。我应该使用 numpy,因为提取的结果与其他数据结构交互。我尝试使用 numba,但它似乎并没有提高提取速度。有没有更快的方法来获得相同的结果?我正在考虑永远做一次非常大的提取,比如 0 和 1 的 10 ^ 12 次提取,然后为每个不同的模拟导入其中的一部分(这应该针对几个 beta 值重复),但我想知道如果有更聪明的举动。
感谢帮助