跳转到主要内容

概率计算。构建和评估涉及随机变量的数学表达式。

项目描述

Latest Version License Python Versions https://github.com/hgrecco/rvmath/workflows/CI/badge.svg?branch=main https://github.com/hgrecco/rvmath/workflows/Lint/badge.svg?branch=main https://coveralls.io/repos/github/hgrecco/rvmath/badge.svg?branch=main

rvmath: 随机变量数学,简单易用

rvmath 是一个Python包,用于构建和评估涉及随机变量的数学表达式。

你想从由 a * cos(b + c) 得到的分布中抽取10个值,其中 a ~ Poissonb ~ Uniformc ~ Normal 吗?没问题

>>> import rvmath as rvm
>>> z = rvm.poisson(mu=5) * np.cos(rvm.uniform() + rvm.norm())
>>> z.rvs(10)

它运行在Python 3.7+上,依赖于 NumPySciPy。它采用BSD许可证。

它非常简单易用

>>> import rvmath as rvm
>>> x = rvm.uniform()
>>> y = rvm.uniform()
>>> z = x - y
>>> z.rvs(3)  #doctest: +SKIP
[ 0.56791289 -0.1547692  -0.73984907]
>>> z.rvs(3)  #doctest: +SKIP
[-0.33095289 -0.08664128  0.09938225]

简而言之,xy 是从均匀分布中抽取的随机变量。 z 是从两个均匀分布的差得到的分布中抽取的随机变量。 z.rvs(3) 从该分布中抽取3个值。

在幕后,rvmath 生成所有随机变量的随机变量并执行所有必要的计算。

rvmath 基于 Scipy Stats,因此那里可用的所有连续分布也在这里,具有相同的名称和参数。 rvs 也遵循相同的API,即

  • size:int 或 int 元组,可选,定义随机变量的数量(默认为 1)。

  • random_state:None、int、RandomState、Generator,可选。如果 seed 为 None,则使用 RandomState 单例。如果 seed 是一个 int,则使用带有 seed 的新 RandomState 实例。如果 seed 已经是 RandomState 或 Generator 实例,则使用该对象。默认为 None。

一个重要的特性是随机变量有一个身份,因此以下代码可以得到预期结果。

>>> w = x - x
>>> w.rvs(3)
[0., 0., 0.]

您还可以使用 NumPy 函数。

>>> c = np.cos(x)
>>> c.rvs(3)

最后,您可以将表达式转换为 SciPy 分布

>>> distro = c.to_distro(name="my_distro")

以获得具有如 rvs、pdf、cdf 等有用方法的对象。

快速安装

要安装 rvmath,只需(很快)

$ pip install rvmath

然后您就可以简单地享受它了!

其他功能

所有 rvmath 对象都有一些有用的选项和方法

您可以为随机变量分配一个 ID

>>> x = rvm.uniform(rvid="x")

以简化调试。如果 rvid 未给出,则将生成一个随机字符串。

您可以请求包含所有随机变量名称及其底层 SciPy 分布对象的字典。

>>> x = rvm.uniform(rvid="x")
>>> y = rvm.norm(rvid="y")
>>> z = x + y
>>> dict(z.random_vars())
{'x': <scipy.stats._distn_infrastructure.rv_frozen at 0x7ff57f196220>,
 'y': <scipy.stats._distn_infrastructure.rv_frozen at 0x7ff57e5a81f0>}

您可以从对象内的所有随机变量中抽取值。

>>> realization = z.draw(3)
>>> print(realization)
{'x': array([0.75633395, 0.99657116, 0.26853511]),
 'y': array([-1.23407414,  0.5261816 ,  2.62764828])}

最后,您可以评估对象以获得特定的实现。

>>> z.eval(realization)
array([-0.47774019,  1.52275276,  2.89618339])

这正是调用 rvs 时发生的情况,但对于调试、测试和评估子表达式特别有用。

在某些情况下,您可能想要预先定义某些随机变量的大小。您可以在构造时使用 size 参数来完成此操作。

>>> z = np.sum(rvm.uniform(size=(3, 3))) * rvm.norm()

没有明确大小参数的随机变量将评估为调用 rvs 时给出的大小。

结合此功能,您可以构建依赖于其他分布的分布

>>> m = rvm.uniform(size=1)
>>> w = rvm.norm(loc=m)

您可以将定义的分布大小与 rvs 提供的大小组合

>>> m = rvm.uniform(size=(None, 3, None)).rvs(2)
>>> m.shape
(2, 3, 2)

None 值将被替换为提供给 rvs 的标量。

常见问题解答

  1. rvmath 支持哪些分布?

    Scipy 中所有可用的连续分布,您可以在 SciPy Stats 文档中查看列表。

  2. 您计划支持离散分布吗?

    是的,希望在下一个版本中。

  3. 我已经通过继承 ``rv_continuous`` 创建了自己的分布子类,我可以与 rvmath 一起使用它吗?

    是的,只需调用 rvm.wrap(distro, *args, **kwargs)


rvmath 由社区维护。有关完整的作者名单,请参阅 AUTHORS

要查看每个版本项目的有序更改列表,请参阅 CHANGES

项目详细信息


下载文件

下载适合您的平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分发

rvmath-0.1.tar.gz (14.9 kB 查看散列

上传时间:

构建分发

rvmath-0.1-py2.py3-none-any.whl (12.0 kB 查看散列

上传时间: Python 2 Python 3

由以下支持