添加新方法、函数和类

虽然在大多数情况下向SciPy添加代码非常简单,但也有少数地方不是这样。本文档包含有关某些具体情况的详细信息,在这些情况下,任务涉及的内容可能从一开始就不清楚。

添加新的统计信息分布

几百年来,统计学家、数学家和科学家一直需要理解、分析和建模数据。这导致了过多的统计分布,其中许多都与其他统计分布有关。对新类型数据的建模继续产生新的分布,理论考虑被应用于新的学科也是如此。关于十几个离散分布的SciPy模型 离散统计分布 和100个连续分布 连续统计分布

要添加新的发行版,需要一个很好的推荐人。Scipy通常使用 [JKB] 作为它的黄金标准, WikipediaDistributions 文章通常提供一些额外的细节和/或图表。

如何创建新的连续分布

要将连续分布添加到本网站,需要执行几个步骤。(添加离散分布类似)。我们将在下面的说明中使用虚构的“松鼠”发行版。

在实施之前

  1. 看看是否 Squirrel 已经实现了--这节省了很多精力!

    • 它可能是用不同的名称实现的。

    • 它可能已使用不同的参数化(形状参数)实现。

    • 它可能是一个更一般的分布族的专门化。

    多个规程发现/重新发现一个分发(或专门化或不同的参数化)是非常常见的。现有的一些SciPy发行版是其他发行版的特色化版本。例如: scipy.stats.arcsine 分发是对 scipy.stats.beta 分配。这些重复存在的目的是(非常!)历史原因和广泛使用原因。目前,不支持向本网站添加现有发行版的新专业化/重新参数化,主要原因是此类添加会增加念力用户。

  2. 创建 SciPy Issue on github ,列出了它的分布、参考文献和收录的原因。

实施

  1. 查找已存在的类似于 Squirrel 。使用其代码作为模板 Squirrel

  2. 读取class的文档字符串 rv_continuous 在……里面 scipy/stats/_distn_infrastructure.py

  3. 编写类的新代码 squirrel_gen 并将其插入到 scipy/stats/_continuous_distns.py ,它(主要)按分布名称的字母顺序排列。

  4. 这个发行版有无限的支持吗?如果不是,则为左侧和/或右侧端点 ab 需要在调用 squirrel_gen(name='squirrel', a=?, b=?)

  5. 如果支承取决于形状参数, squirrel_gen._get_support() 需要实施。

  6. 默认继承的 _argcheck() 实现检查形状参数是否为正。创建更合适的实现。

  7. 如果 squirrel_gen.ppf() 相对于它的计算成本很高 squirrel_gen.pdf() ,请考虑将 momtype 在对的调用中 squirrel_gen()

  8. 如果 squirrel_gen.rvs() 计算成本很高,请考虑实现特定的 squirrel_gen._rvs()

  9. 将名称添加到文档字符串中的列表中 scipy/stats/__init__.py

  10. 将名称和一组良好的示例形状参数添加到 distcont 列表位置 scipy/stats/_distr_params.py 那就是。这些形状参数用于测试和自动文档生成。

  11. 添加名称和一个 _invalid_ 将示例形状参数集添加到中的列表 invdistcont ,也在 _distr_params.py 。这些形状参数也用于测试。

  12. 添加 TestSquirrel 类以及对 scipy/stats/tests/test_distributions.py

  13. 跑过去(!)那些测试。

实施后

  1. 添加教程 doc/source/tutorial/stats/continuous_squirrel.rst

  2. 将其添加到中的连续分布列表中 doc/source/tutorial/stats/continuous.rst

  3. 更新 number of continuous distributions 中的示例代码中 doc/source/tutorial/stats.rst

  4. 成功构建文档。

  5. 提交请购单。

参考文献

JKB

Johnson、Kotz和Balakrishnan,“连续单变量分布,第1卷”,第二版,John Wiley和Sons,第173页(1994)。