Добавление новых методов, функций и классов#
Хотя добавление кода в SciPy в большинстве случаев довольно просто, есть несколько мест, где это не так. Этот документ содержит подробную информацию о некоторых конкретных ситуациях, когда с самого начала может быть неясно, что требуется для выполнения задачи.
Добавление нового статистического распределения#
В течение сотен лет статистикам, математикам и ученым требовалось понимать, анализировать и моделировать данные. Это привело к множеству статистических распределений, многие из которых связаны друг с другом. Моделирование новых типов данных продолжает порождать новые распределения, как и теоретические соображения, применяемые к новым дисциплинам. SciPy моделирует около дюжины дискретных распределений Дискретные статистические распределения и 100 непрерывных распределений Непрерывные статистические распределения.
Для добавления нового распределения необходим хороший справочный материал. Scipy обычно использует [JKB] в качестве эталонного стандарта, с WikipediaDistributions статьи часто предоставляют дополнительные детали и/или графические построения.
Как создать новое непрерывное распределение#
Есть несколько шагов для добавления непрерывного распределения в SciPy. (Добавление дискретного распределения аналогично). Мы будем использовать фиктивное распределение «Белка» в инструкциях ниже.
Перед реализацией#
См., если
Squirrelуже реализовано — это экономит много усилий!Возможно, он был реализован под другим названием.
Возможно, он был реализован с другой параметризацией (параметры формы).
Это может быть специализация более общего семейства распределений.
Очень часто разные дисциплины открывают/переоткрывают распределение (или его специализацию, или другую параметризацию). В SciPy уже есть несколько распределений, которые являются специализациями других распределений. Например,
scipy.stats.arcsineраспределение является специализациейscipy.stats.betaраспределение. Эти дублирования существуют по (очень!) историческим и широко распространенным причинам использования. В настоящее время добавление новых специализаций/репараметризаций существующих распределений в SciPy не поддерживается, в основном из-за увеличения путаницы пользователей, возникающей в результате таких добавлений.Создать Проблема SciPy на GitHub, перечисляя распределение, ссылки и причины его включения.
Реализация#
Найти уже существующее распределение, похожее на
Squirrel. Используйте его код в качестве шаблона дляSquirrel.Прочитайте строку документации для класса
rv_continuousв scipy/stats/_distn_infrastructure.py.Написать новый код для класса
squirrel_genи вставить его в scipy/stats/_continuous_distns.py, который находится (в основном) в алфавитном порядке по названию распределения.Имеет ли распределение бесконечную поддержку? Если нет, то левая и/или правая границы
a,bнужно указать при вызовеsquirrel_gen(name='squirrel', a=?, b=?).Если поддержка зависит от параметров формы,
squirrel_gen._get_support()должен быть реализован.Унаследованный по умолчанию
_argcheck()реализация проверяет, что параметры формы положительны. Создайте более подходящую реализацию.Если
squirrel_gen.ppf()дорого вычислять по сравнению сsquirrel_gen.pdf(), рассмотрите установкуmomtypeв вызове кsquirrel_gen().Если
squirrel_gen.rvs()дорого вычислять, рассмотрите реализацию специфическогоsquirrel_gen._rvs().Добавьте имя в список в docstring для scipy/stats/__init__.py.
Добавить имя и хороший набор примерных параметров формы к
distcontсписок в scipy/stats/_distr_params.py. Эти параметры формы используются как для тестирования, так и для автоматической генерации документации.Добавить имя и _недопустимый_ набор примерных параметров формы в список в
invdistcont, также в _distr_params.py. Эти параметры формы также используются для тестирования.Добавить
TestSquirrelкласс и любые специфические тесты для scipy/stats/tests/test_distributions.py.Запустить и пройти(!) тесты.
После реализации#
Добавить учебное пособие
doc/source/tutorial/stats/continuous_squirrel.rstДобавить его в список непрерывных распределений в doc/source/tutorial/stats/continuous.rst.
Обновить
number of continuous distributionsв примере кода в doc/source/tutorial/stats.rst.Успешно собрать документацию.
Отправить PR.
Ссылки#
Johnson, Kotz, and Balakrishnan, “Continuous Univariate Distributions, Volume 1”, Second Edition, John Wiley and Sons, p. 173 (1994).