2015-01-07 65 views
3

我想cythonise我做了什麼,涉及到並行循環內的隨機數生成。我想使用mtrand,但由於它是Python代碼,因此無法使用nogil塊,由於某些原因,mtrand的.pyx未公開給我們其他人使用。cython的線程安全隨機數生成

我知道我可以使用rand或任何其他C RNG(例如gsl);有沒有更標準的方法?

回答

2

你已經正確地總結了這種情況。在撰寫本文時,你可以做的三兩件事之一:

  • 修改NumPy的允許通過其默認界面共享的聲明中mtrand.pxd

  • 使用NumPy的的隨機發生器(也許你可以存儲所有在nogil區塊之外預先設置的隨機數?)

  • 使用用C編寫的隨機數發生器(或者如果您使用Cython生成C++代碼,可能使用C++)。

老實說,我可能會做最後一個。如果您可以使用C++ 11,那麼現在可以使用C++標準庫中包含的幾個優秀的隨機數生成器。

+0

實際上#3是最現實的一個。不過,我對爲什麼'mtrand'沒有曝光感到困惑。如果我使用完整的'scipy'堆棧,爲什麼我應該使用不同的RNG? – marco

+0

這是一個很好的問題。在scipy堆棧中有各種各樣的Cython文件,這些文件不作爲公共接口公開。我能看到的唯一原因是,許多界面並非真正意義上是numpy/scipy的公共支持部分。另一方面,我敢打賭,越來越多的這些接口將在未來公開。我只是無意中發現在用Cython用戶討論板的一些相關討論:https://groups.google.com/forum/#!topic/cython-users/9UGMi_b3tVo – IanH

相關問題