3
我想cythonise我做了什麼,涉及到並行循環內的隨機數生成。我想使用mtrand
,但由於它是Python代碼,因此無法使用nogil
塊,由於某些原因,mtrand
的.pyx未公開給我們其他人使用。cython的線程安全隨機數生成
我知道我可以使用rand
或任何其他C RNG(例如gsl
);有沒有更標準的方法?
我想cythonise我做了什麼,涉及到並行循環內的隨機數生成。我想使用mtrand
,但由於它是Python代碼,因此無法使用nogil
塊,由於某些原因,mtrand
的.pyx未公開給我們其他人使用。cython的線程安全隨機數生成
我知道我可以使用rand
或任何其他C RNG(例如gsl
);有沒有更標準的方法?
你已經正確地總結了這種情況。在撰寫本文時,你可以做的三兩件事之一:
修改NumPy的允許通過其默認界面共享的聲明中mtrand.pxd
使用NumPy的的隨機發生器(也許你可以存儲所有在nogil
區塊之外預先設置的隨機數?)
使用用C編寫的隨機數發生器(或者如果您使用Cython生成C++代碼,可能使用C++)。
老實說,我可能會做最後一個。如果您可以使用C++ 11,那麼現在可以使用C++標準庫中包含的幾個優秀的隨機數生成器。
實際上#3是最現實的一個。不過,我對爲什麼'mtrand'沒有曝光感到困惑。如果我使用完整的'scipy'堆棧,爲什麼我應該使用不同的RNG? – marco
這是一個很好的問題。在scipy堆棧中有各種各樣的Cython文件,這些文件不作爲公共接口公開。我能看到的唯一原因是,許多界面並非真正意義上是numpy/scipy的公共支持部分。另一方面,我敢打賭,越來越多的這些接口將在未來公開。我只是無意中發現在用Cython用戶討論板的一些相關討論:https://groups.google.com/forum/#!topic/cython-users/9UGMi_b3tVo – IanH