如何生成可供cython使用的rand c++对象



我想用cython在并行上下文中生成随机值。我有一些cpp代码,我不知道如何在cython中转换(或从cpp文件导入(

我的cpp代码是:

#include <random>
static std::random_device rand_device;
static std::mt19937 rnd_gen(rand_device());
static std::uniform_real_distribution<> rnd_unif(0, 1);

我想用这些代码行定义一个cpp文件,但我可以在cython文件中写些什么来导入和使用它?

我看到在cython中生成随机数的规范方法来自一个类似的问题,但它总是生成相同的数字

从那里我需要做这样的设置:

from distutils.core import setup
from Cython.Build import cythonize
import numpy
setup(
name="cyvmc",
version="1.0",
packages=["cyvmc"],
ext_modules=cythonize(["cyvmc/*.pyx"]),
include_dirs=[numpy.get_include()],
)

此安装程序将找到cpp文件:我正确吗?

在那之后,我不知道如何导入cpp文件以供cython使用我对c++不熟悉。如果我只使用这4行代码,我需要创建一个rand.h吗

如注释中所述,从Cython 3.0.0a11开始,C++STL<random>已经被封装,并且是Cython模块libcpp.random的一部分。您只需要更新您的Cython版本,即pip3 install cython==3.0.0a11

这是一个最小工作example.pyx:

# distutils: language = c++
from libcpp.random cimport random_device, mt19937, uniform_real_distribution
def foo():
cdef random_device dev
cdef mt19937 rnd_gen = mt19937(dev())
cdef uniform_real_distribution[double] rnd_unif = uniform_real_distribution[double](0, 1)

# create one random_value
return rnd_unif(rnd_gen)

那么,您不需要在setup.py中包含任何头文件。只需将其安装为常规*.pyx文件即可。

相关内容

  • 没有找到相关文章

最新更新