我正在试图对我所做的事情进行cython化,这涉及并行化循环中的随机数生成。我想使用mtrand
但由于它是Python代码,因此无法使用nogil
块,并且出于某种原因mtrand
的.pyx不会暴露给我们其他人使用
我知道我可以使用rand
或任何其他C RNG(例如gsl
);有更标准的方法吗?
答案 0 :(得分:2)
您已正确总结了这种情况。在撰写本文时,您可以执行以下三种操作之一:
修改NumPy以允许在mtrand.pxd中共享声明
通过默认界面使用NumPy的随机生成器(也许您可以在nogil
块之外预先存储所有随机数?)
使用用C编写的随机数生成器(如果您使用Cython生成C ++代码,可能使用C ++)。
老实说,我可能会做最后一次。如果你可以使用C ++ 11,那么你可以使用C ++标准库中包含几个好的随机数生成器。