Python randomkit.h发生了什么,或者如何迁移到最新的numpy.random c/cython api

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

我有一个cython扩展模块,它使用numpy.random的一个小子集。它在16.2中运行良好

现在,很明显,numpy随机模块有一个主要的reorg

虽然这些更改对python用户来说很温和,但它们完全破坏了我的cython代码

据我所知,从17.0开始:

  • 标题
    randomkit.h
    不见了
  • rk.*
    符号不见了。(它们以前位于
    mtrand.cpython-.so
  • 问题:

  • 我对情况的解释正确吗
  • 有关于迁移的帮助吗(指针、建议)
  • 下面是我的代码片段,其中显示了旧api以及我正在使用的部分:

    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问题: