Рубрики
Без рубрики

Numpy Factorial – полезное иллюстрированное руководство по факториалам в Numpy, Scipy, Math, Python

Факториальная функция n! рассчитывает количество перестановок в наборе. Скажем, вы хотите заниматься тремя футбольными командами Манчестер Юнайтед, ФК Барселона и FC Bayern München – сколько возможных рейтингов существует? Ответ х 2 х. В общем, для расчета факториала n!, Вам нужно … Numpy Factorial – полезное иллюстрированное руководство по факториалам в Numpy, Scipy, Math, Python Подробнее »

Автор оригинала: Chris.

Факториальная функция Ней! рассчитывает количество перестановок в наборе. Скажем, вы хотите заниматься тремя футбольными командами Манчестер Юнайтед , ФК Барселона и FC Bayern München – Сколько возможных рейтингов существует? Ответ – 3! х 2 х Отказ

В общем, для расчета факториал Ней! , вам нужно умножить все положительные целочисленные номера, которые меньше или равны n . Например, если у вас есть 5 футбольных команд, есть 5! х 4 х 3 х 2 х разные пары.

Существует много разных способов легко рассчитать факториальную функцию в Python (см. Альтернативы ниже). Вы также можете посмотреть мое видео объяснения:

Но прежде чем мы будем двигаться дальше, я рад представить вам мою новую книгу Python Python One-listers (Amazon Link).

Если вам нравятся одноклассники, вы будете любить книгу. Это научит вам все, что нужно знать о Одно строка кода Python. Но это тоже Введение в компьютерную науку , наука о данных, машин обучения и алгоритмы. Вселенная в одной строке Python!

Книга была выпущена в 2020 году с помощью книги по программированию мирового класса Nostarch Press (San Francisco).

Ссылка: https://nostarch.com/pythononeliners.

Как рассчитать факториал в Numpy?

Numpy’s Математический модуль относительно мало известно. Содержит эффективные реализации Basic Математика Функция, такая как факториальная функция numpy.math.factorial (n) Отказ

Вот пример того, как рассчитать факториал 3! с Numpy :

>>> import numpy as np
>>> np.math.factorial(3)
6

Факториальная функция в Numpy имеет только один целочисленный аргумент N Отказ Если аргумент отрицательный или не целое число, Python будет поднять ошибку значений.

Практический пример : Скажем, есть 20 футбольных команд в Премьер-лиге Англии. Каждая команда может достичь любого из 20 рангов в конце сезона. Сколько возможных рейтингов существует в премьер-лиге, учитывая 20 фиксированных команд?

Рисунок: Пример трех возможных рейтингов футбольных команд в Премьер-лиге Англии.

Вот как вы можете рассчитать это в Python для 3 команд:

Упражнение : Измените код, чтобы рассчитать количество рейтингов на 20 команд!

Как рассчитать факториал в Scipy?

Популярные Scipy Library это коллекция библиотек и модулей, которые помогут вам с научными вычислениями. Это мощная коллекция функциональных возможностей на Numpy Library Отказ Таким образом, это не удивит, что Scipy Factorial Function Scipy.math.factorial () На самом деле является ссылкой на факториальную функцию Numpy numpy.math.factorial () Отказ На самом деле, если вы сравниваете свои адреса памяти, используя ключевое слово . это Оказывается, что оба относятся к той же функции объект :

>>> import scipy, numpy
>>> scipy.math.factorial(3)
6
>>> numpy.math.factorial(3)
6
>>> scipy.math.factorial is numpy.math.factorial
True

Таким образом, вы можете использовать оба Scipy.math.factorial (3) и numpy.math.factorial (3) вычистить факториальную функцию 3! .

Как оба функции указывают на тот же объект, характеристики производительности одинаковы – один не быстрее, чем другой.

Как рассчитать факториал в библиотеке Python Math?

Как оказывается, не только Numpy и Scipy поставляются с упакованным «внедрением» факториальной функции, но и мощный Python Математика Библиотека Отказ Вот пример того, как использовать math.factorial (n) Функция для вычисления факториала Ней! .

>>> import math
>>> math.factorial(3)
6

Факториал 3 – 6 – ничего нового здесь.

Давайте проверим, действительно ли это та же реализация, что и факториальные функции Numpy и Scipy:

>>> import scipy, numpy, math
>>> scipy.math.factorial is math.factorial
True
>>> numpy.math.factorial is math.factorial
True

ДА! Оба библиотеки Numpy и Scipy полагаются на той же факториальной функции математической библиотеки. Следовательно, чтобы сохранить ценное место в вашем коде, используйте функцию Math Factorial, если вы уже импортировали математическую библиотеку. Если нет, просто используйте псевдонимы Numpy или Scipy Factimation.

Итак, «до сих пор» до сих пор мы видели одно и то же старое вино в трех разных бутылках: Numpy, Scipy и Mathbies, все относятся к той же факторе реализации функции.

Как рассчитать факториал в Python?

Часто хорошая идея реализовать функцию самостоятельно. Это поможет вам лучше понять основные детали и дает вам уверенность и опыт. Итак, давайте реализуем факториальную функцию в Python.

Для расчета количества перестановок данного набора N Элементы, вы используете факториальную функцию Ней! Отказ Факториал определяется следующим образом:

Ней! × (N – 1) × (N – 2) ×. Отказ Отказ × 1.

Например:

  • 1!
  • 3! × 2 ×
  • 10! × 9 × 8 × 7 × 6 × 5 × 4 × 3 × 2 ×, 628 800
  • 20! × 19 × 18 ×. Отказ Отказ  × 3 × 2 ×, 432 902,008,176 640 000

Рекурсивно факториальная функция также может быть определена следующим образом:

Ней! × (N – 1)!

Случаи базы рекурсионов определяются как показанные здесь:

1 !!

Интуиция этих базовых случаев заключается в том, что набор с одним элементом имеет одну перестановку, а набор с нулевыми элементами имеет одну перестановку (есть один способ назначать нулевые элементы в нулевые ведра).

Теперь мы можем использовать это рекурсивное определение для расчета факториальной функции в рекурсивной форме:

>>> factorial = lambda n: n * factorial(n-1) if n > 1 else 1
>>> factorial(3)
6

Попробуйте сами : Запустите этот одноклассник в нашем интерактивном кодовом оболочке:

Упражнение : Что вывод?

Ключевое слово Lambda используется для определения анонимной функции в одной строке. Вы можете узнать все, что вам нужно знать о функции лямбда в этом всеобъемлющем руководстве на блог Finxter.

Если вы любите однолонисты, как я, проверьте мою книгу « Python One-listers », который научит вас всем, что нужно узнать о одной линейке кода Python!

Вы создаете ламбда функцию с одним аргументом N и назначьте функцию лямбда на имя факториал Отказ Наконец, вы называете названную функцию факториал (N-1) Для расчета результата вызова функции факториал (n) Отказ

Грубо говоря, вы можете использовать более простое решение для факториал (N-1) построить решение более сложной проблемы факториал (n) Умножая первое с аргументом ввода n . Как только вы достигнете рекурсионного база Case N Вы просто возвращаете жесткое решение факториал (1) (0) .

Альтернативой состоит в том, чтобы использовать итеративные вычисления, такие как это:

def factorial(n):
    fac = n
    for i in range(1, n):
        fac *= i
    return fac

print(factorial(3))
# 6

print(factorial(5))
# 120

В функции факториал (n) мы инициализируем переменную Fac до стоимости n . Тогда мы повторяем все значения Я между 1 и N-1 (включительно) и умножьте их со значением, хранящимся в данный момент в переменной Fac Отказ Результатом является факториал целочисленного значения N Отказ

Сравнение скорости

Давайте сравним все три различных способа расчета факториальной функции в отношении Скорость Отказ Обратите внимание, что NUMPY, SCIPY и MATH FACTION факториальные функции ссылаются на тот же объект функции – они имеют одинаковые свойства скорости. Таким образом, мы сравниваем только math.factorial () Функция с нашими двумя реализациями в Python (рекурсивный и итерационный).

Хочу сначала догадаться?

Я использовал свой собственный ноутбук (Qadcore, Intel Core i7, 8-е поколение) с Python 3.7 для запуска 900 факториальных вычислений для каждого метода, используя следующий код:

import time

num_runs = 900
speed = []


## SPEED TEST MATH.FACTORIAL ##
import math


start = time.time()
for i in range(num_runs):
    math.factorial(i)
stop = time.time()

speed.append(stop-start)

    
## SPEED TEST RECURSIVE ##
factorial = lambda n: n * factorial(n-1) if n > 1 else 1

start = time.time()
for i in range(num_runs):
    factorial(i)
stop = time.time()

speed.append(stop-start)

    
## SPEED TEST ITERATIVE ##
def factorial(n):
    fac = n
    for i in range(1, n):
        fac *= i
    return fac


start = time.time()
for i in range(num_runs):
    factorial(i)
stop = time.time()

speed.append(stop-start)


## RESULT
print(speed)
# [0.011027336120605469, 0.10074210166931152, 0.0559844970703125]
import matplotlib.pyplot as plt
plt.bar(["Math", "Recursive", "Iterative"], height=speed)
plt.show()

WOW-The Clear Winner – это модуль Math! Четкий знак, который вы всегда должны предпочитать библиотечный код по собственным реализациям!

Реализация по математической библиотеке составляет почти на 600% быстрее, чем итеративный, чем 1000% быстрее, чем рекурсивная реализация.

Метод Math.factorial. Рекурсивный Итерационный
Секунды 0.01 0.10 0.05

Попробуй сам : Вы можете выполнить эту скорость сравнения себя в интерактивной оболочке кода:

Упражнение : Вы получаете аналогичные результаты в вашем браузере? Запустите оболочку, чтобы узнать!

Куда пойти отсюда

Три реализации библиотеки numpy.math.factorial () С Scipy.math.factorial () и math.factorial () указать на тот же объект функции в памяти – Они идентичны, поэтому используйте любой из них.

Один уровень более высокого уровня, вы узнали, что библиотечные реализации популярных библиотек, таких как NUMPY, окупанно быстро и эффективны. Сделайте себе услугу и используйте библиотечные реализации, где это возможно.

Хорошее место для начала – это Numpy Library, которая является основой многих более продвинутых библиотек науки и машинного обучения в Python, таких как Matplotlib, Pandas, Tensorflow и Scikit – учиться. Обучение Numpy установит фундамент, на котором вы можете создать свою карьеру Python.

Если вам понравилась эта статья, вам также понравится моя букпинская книга “Coffee Break Numpy” Это заставляет вас пошаговать в Numpy библиотеку в забавной, привлечении и интерактивном способе. Про кодеры Подробнее Книги!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.

Оригинал: “https://blog.finxter.com/the-factorial-function-competition-numpy-scipy-math-and-python/”