python - 在 Cython 中生成随机数的正确方法?

标签 python random numpy cython

在 Cython 的 [0,1] 中生成随机随机数的最有效和可移植的方法是什么?一种方法是使用 C 库中的 INT_MAXrand():

from libc.stdlib cimport rand
cdef extern from "limits.h":
    int INT_MAX
cdef float randnum = rand() / float(INT_MAX)

这样使用INT_MAX可以吗?我注意到它与你从 Python 的 max int 得到的常量完全不同:

import sys
print INT_MAX
print sys.maxint 

产量:

2147483647  (C max int)
9223372036854775807  (python max int)

rand() 的正确“标准化”数是多少? EDIT 另外,如果使用从 libc 调用 rand() 的 C 方法,如何设置随机种子(例如根据当前时间播种)?

最佳答案

C 标准说 rand 返回一个范围为 0 到 RAND_MAX 的 int,因此将其除以 RAND_MAX(来自 stdlib.h ) 是对其进行规范化的正确方法。在实践中,RAND_MAX 几乎总是等于 MAX_INT,但不要依赖它。

因为 rand 自 C89 以来一直是 ISO C 的一部分,因此保证在任何地方都可用,但不保证其随机数的质量。但是,如果可移植性是您主要关心的问题,那么这是您的最佳选择,除非您愿意使用 Python 的 random 模块。

Python 的 sys.maxint完全是一个不同的概念;它只是 Python 可以在 它自己的 int 类型中表示的最大正数;较大的必须是多头。 Python 的 int 和 long 与 C 没有特别的关系。

关于python - 在 Cython 中生成随机数的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16138090/

相关文章:

PHP MySQL 选择随机行,其中行不同

Python随机数

swift - 确定何时随机调用函数的最佳方法

python - Numpy PIL Python : crop image on whitespace or crop text with histogram Thresholds

python - 如何根据列值对 Numpy 二维矩阵中的行进行分组?

python - 无法退出正在运行的 python 脚本

python - 从文件导入 numpy 数组时,如何将两个字段合并为一个?

python - 组时间序列

python - 如何使用 for 循环和 Python 中的 csv 库遍历列?

python - 如何使 append 按预期与数组一起工作?