我正在尝试对我所做的事情进行 cythonise,这涉及在并行循环内生成随机数。我想使用 mtrand
但因为它是 Python 代码,所以它不能在 nogil
block 中工作,并且出于某种原因 mtrand
的 .pyx 是'暴露给我们其他人使用。
我知道我可以使用 rand
或任何其他 C RNG(例如 gsl
);有没有更标准的方法?
最佳答案
你已经正确地总结了情况。在撰写本文时,您可以执行以下三项操作之一:
修改 NumPy 以允许共享 mtrand.pxd 中的声明
通过默认界面使用 NumPy 的随机生成器(也许您可以预先将所有随机数存储在
nogil
block 之外?)使用用 C 编写的随机数生成器(如果您让 Cython 生成 C++ 代码,则可能使用 C++)。
老实说,我可能会做最后一个。如果您可以使用 C++ 11,那么您可以使用 C++ 标准库中现在包含的几个很好的随机数生成器。
关于python - 使用cython生成线程安全的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27824959/