python中的random.normalvariate()和random.gauss()有什么区别?

ric*_*nis 24 python random normal-distribution gaussian

random.normalvariate()和之间有什么区别random.gauss()

它们采用相同的参数并返回相同的值,执行基本相同的功能.

我从之前的回答中了解到,这random.gauss()不是线程安全的,但这在这种情况下意味着什么?程序员为什么要关心这个?或者提出,为什么Python的'随机'中包含一个线程安全且非线程安全的版本?

Lor*_*ton 19

这是个有趣的问题.一般来说,了解两个python实现之间差异的最好方法是自己检查代码:

import inspect, random
str_gauss = inspect.getsource(random.gauss)
str_nv=inspect.getsource(random.normalvariate)
Run Code Online (Sandbox Code Playgroud)

然后打印每个字符串以查看源的不同之处.快速查看代码表明,不仅它们的多线程行为不同,而且算法也不一样; 例如,根据以下注释normalvariate使用称为Kinderman和Monahan方法的东西str_nv:

# Uses Kinderman and Monahan method. Reference: Kinderman,
# A.J. and Monahan, J.F., "Computer generation of random
# variables using the ratio of uniform deviates", ACM Trans
# Math Software, 3, (1977), pp257-260.
Run Code Online (Sandbox Code Playgroud)

  • 遗憾的是,在所谓的文档中找不到此类文档。有什么见解吗? (2认同)

VHa*_*sop 9

线程安全的代码片段必须考虑执行期间可能的竞争条件.这引入了诸如互斥,信号量等同步方案的开销.

但是,如果您正在编写不可重入的代码,则通常不会出现竞争条件,这实际上意味着您可以编写执行速度更快的代码.我想这就是为什么random.gauss()被引入,因为python doc说它比线程安全版本更快.