2011-02-16 76 views
0

如何在我的「Python with numpy」代碼中使用相同的隨機數生成器作爲我的C++ 0x代碼?boost.python中的隨機數生成器

我目前使用

std::ranlux64_base_01 
用C++

numpy.random.RandomState(10) 
在Python

我暴露C++的隨機數生成器:

typedef std::ranlux64_base_01 RNG; 
RNG g_rng; 

... 

class_<RNG>("RNG"); 
scope().attr("g_rng") = g_rng; 

如何與採取numpy.random Python的方法來使用它?

回答

1

有兩種方法: 第一種是使用python的隨機數發生器從C++。它可能看起來像這樣:

boost::python::object randmod = boost::python::import("numpy.random") 
boost::python::object randfunc = randmod.attr("RandomState") 
randfunc(10) 

其次是包裝和公開C++函數,以便它可以從python使用。這個代碼留給學生練習。

編輯: 一旦你導出了C++函數,你將不得不使用C++函數爲它的隨機位創建一個模擬numpy.random.RandomState接口的python對象。這可能是你想要做的更多工作。我沒有使用numpy,但是從文檔看來,RandomState對象看起來並不平凡。

+0

感謝您的回答。我已經更新了這個問題。 – 2011-02-17 18:30:55