Python randomkit.h发生了什么,或者如何迁移到最新的numpy.random c/cython api
我有一个cython扩展模块,它使用numpy.random的一个小子集。它在16.2中运行良好 现在,很明显,numpy随机模块有一个主要的reorg 虽然这些更改对python用户来说很温和,但它们完全破坏了我的cython代码 据我所知,从17.0开始:Python randomkit.h发生了什么,或者如何迁移到最新的numpy.random c/cython api,python,numpy,cython,Python,Numpy,Cython,我有一个cython扩展模块,它使用numpy.random的一个小子集。它在16.2中运行良好 现在,很明显,numpy随机模块有一个主要的reorg 虽然这些更改对python用户来说很温和,但它们完全破坏了我的cython代码 据我所知,从17.0开始: 标题randomkit.h不见了 rk.*符号不见了。(它们以前位于mtrand.cpython-.so) 问题: 我对情况的解释正确吗 有关于迁移的帮助吗(指针、建议) 下面是我的代码片段,其中显示了旧api以及我正在使用的部分: im
randomkit.h
不见了rk.*
符号不见了。(它们以前位于mtrand.cpython-.so
)import cython
import numpy as np
cimport numpy as np
cdef extern from "randomkit.h":
ctypedef struct rk_state:
unsigned long key[624]
< snip >
double p4
void rk_seed(unsigned long seed, rk_state *state)
unsigned long RK_MAX
unsigned long rk_interval(unsigned long max, rk_state *state)
unsigned long rk_random(rk_state *state)
导入cython
将numpy作为np导入
cimport numpy作为np
来自“randomkit.h”的cdef外部:
ctypedef结构rk_状态:
无符号长键[624]
双p4
无效rk_种子(无符号长种子,rk_状态*状态)
无符号长RK_MAX
无符号长rk_间隔(无符号长最大值,rk_状态*状态)
无符号长rk_随机(rk_状态*状态)
randomkit.h
及其包含的接口确实为新的基础设施腾出了空间。在撰写本文时,新的api是否稳定/是否得到官方支持尚不清楚,但事实上,它已经存在,这确实表明了这一点。randomkit.h
及其包含的接口确实为新的基础设施腾出了空间。在撰写本文时,新的api是否稳定/是否得到官方支持尚不清楚,但事实上,它已经在使用,这确实表明了这一点。看起来numpy不再使用rk_random,而是使用MT19937(以及其他什么)。因此不再构建它(以下是从setup.py:中删除旧版本的提交)。您的选择可能是切换新的生成器,或者将randomkit构建为包的一部分。FWIW:我打开了一个github问题:看起来numpy不再使用rk_random,而是使用MT19937(等等)。因此不再构建它(以下是从setup.py:中删除旧版本的提交)。您的选择可能是切换新的生成器,或者将randomkit构建为包的一部分。FWIW:我已经打开了一个github问题: