python - 使用cython生成线程安全的随机数

标签 python numpy cython

我正在尝试对我所做的事情进行 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/

相关文章:

python - Python 3 中的字典理解

python - 使用OpenCV和Python从图像创建视频

python - 如何从 .las 文件中的 16 位值中过滤颜色?

python - 如何修复 Tensorflow 中的 "IndexError: list index out of range"

cython - cupy 支持 cython(例如缓冲索引)吗?

python - 删除搁架中数据的最干净方法是什么?

python - Pandas 数据框连续行之间的重复计算

python - 使用 pyproject.toml 进行 `` pip install -e .`` 构建 cython 扩展

python - 如何更好地使用 Cython 更快地求解微分方程?

python - DataFrame 的给定列非零的行数