小编Mar*_*cus的帖子

如何使用新的 NumPy 随机数生成器?

NumPy 现在建议新代码使用defacult_rng()实例而不是新代码这一事实numpy.random让我开始思考应该如何使用它来产生良好的结果,无论是性能副还是统计。

第一个例子是我最初想写的:

import numpy as np

class fancy_name():
  def __init__(self):
    self.rg = np.random.default_rng()
    self.gamma_shape = 1.0
    self.gamma_scale = 1.0

  def public_method(self, input):
    # Do intelligent stuff with input
    return self.rg.gamma(self.gamma_shape, slef.gamma_scale)
Run Code Online (Sandbox Code Playgroud)

但我也考虑过在每个函数调用中创建一个新实例:

import numpy as np

class fancy_name():
  def __init__(self):
    self.gamma_shape = 1.0
    self.gamma_scale = 1.0

  def public_method(self, input):
    # Do intelligent stuff with input
    rg = np.random.default_rng()
    return rg.gamma(self.gamma_shape, slef.gamma_scale)
Run Code Online (Sandbox Code Playgroud)

第三种选择是将 rng 作为函数调用中的参数传递。这样,同样的 rng 也可以用于代码的其他部分。

这用于模拟环境中,该环境将经常调用以进行采样,例如转换时间。

我想问题是这三种方法中的任何一种是否都有论据,是否存在某种实践?

此外,对使用这些随机数生成器的更深入解释的任何参考(NumPy 文档和随机采样文章除外)都非常有趣!

python random numpy-random

5
推荐指数
1
解决办法
398
查看次数

Scipy 正常 PDF 求和为大于 1 的值

我正在处理scipy.stats.normPDF。我想知道我是否做错了什么(也许是),因为正态分布上的 PDF 之和返回的值大于 1,并且根据定义,概率密度函数的总和应为 1。我会如果总和达到 ~0.99 就可以了(因为我没有对区间内的所有值求和),但 20 不太可接受。下面显示了一个最小示例

from scipy.stats import norm
lower_bound = norm.ppf(0.01)
upper_bound = norm.ppf(0.99)
N = 100
x = np.linspace(lower_bound, upper_bound, 100)
P = norm.pdf(x) 
print(np.sum(P))
Run Code Online (Sandbox Code Playgroud)

python statistics scipy probability-density

3
推荐指数
1
解决办法
1538
查看次数