HOWTO · NumPy

Factorielle NumPy

Apprenez à calculer la factorielle des éléments d'un tableau NumPy à l'aide de la fonction special.factorial() de SciPy en Python, avec des exemples de code et des explications des résultats, y compris pourquoi les valeurs sont renvoyées sous forme de nombres à virgule flottante et comment demander à la place des résultats entiers exacts.

Sur cette page

Calculer la factorielle de nombres est une tâche courante en mathématiques et en programmation, en particulier dans des domaines comme les statistiques et la combinatoire. En Python, nous pouvons calculer la factorielle des éléments d’un tableau NumPy à l’aide de la fonction special.factorial() de la bibliothèque SciPy.

Cette fonction effectue le calcul élément par élément sur un tableau. Que vous travailliez avec un petit ensemble de nombres ou un grand tableau, le même appel applique la factorielle à chaque élément à la fois.

Dans cet article, nous explorerons comment utiliser la fonction special.factorial(), en fournissant des exemples clairs et des explications pour vous aider à saisir ce concept essentiel.

Qu’est-ce qu’une factorielle ?

Avant de plonger dans le code, il est crucial de comprendre ce qu’est une factorielle. La factorielle d’un entier non négatif n, notée n!, est le produit de tous les entiers positifs inférieurs ou égaux à n. Par exemple, 5! est égal à 5 × 4 × 3 × 2 × 1, ce qui est égal à 120. Les factorielles sont largement utilisées dans les permutations, les combinaisons et d’autres calculs mathématiques.

En programmation, les factorielles sont souvent nécessaires pour chaque élément d’un tableau à la fois. C’est là que NumPy et SciPy entrent en jeu : special.factorial() applique l’opération élément par élément sur un tableau.

Utiliser la fonction special.factorial() de SciPy

La fonction special.factorial() de la bibliothèque SciPy est conçue pour calculer la factorielle de chaque élément d’un tableau. Elle effectue l’opération élément par élément, donc un seul appel gère un tableau de n’importe quelle taille.

Pour utiliser cette fonction, vous devez d’abord installer la bibliothèque SciPy si ce n’est déjà fait. Vous pouvez le faire en utilisant pip :

pip install scipy

Une fois SciPy installé, vous pouvez commencer à utiliser la fonction special.factorial(). Vous trouverez ci-dessous un exemple simple pour montrer comment calculer la factorielle d’un tableau d’entiers.

import numpy as np
from scipy import special

arr = np.array([0, 1, 2, 3, 4, 5])
factorials = special.factorial(arr)

print(factorials)

Output:

[  1.   1.   2.   6.  24. 120.]

Dans cet exemple, nous importons d’abord les bibliothèques nécessaires : NumPy et le module special de SciPy. Nous créons un tableau NumPy contenant des entiers de 0 à 5. En passant ce tableau à la fonction special.factorial(), nous obtenons les factorielles de ces nombres. La sortie montre les factorielles respectives sous forme de nombres à virgule flottante, ce qui est le comportement par défaut de la fonction.

Calculer des factorielles pour de grands tableaux

Le même appel fonctionne sans changement pour des tableaux plus grands.

Examinons un exemple où nous calculons la factorielle pour une plus grande plage de nombres.

large_arr = np.arange(10, 21)  # Array from 10 to 20
large_factorials = special.factorial(large_arr)

print(large_factorials)

Output:

[3.62880000e+06 3.99168000e+07 4.79001600e+08 6.22702080e+09
 8.71782912e+10 1.30767437e+12 2.09227899e+13 3.55687428e+14
 6.40237371e+15 1.21645100e+17 2.43290201e+18]

Dans ce cas, nous créons un tableau contenant des entiers de 10 à 20 à l’aide de np.arange(). La fonction special.factorial() calcule la factorielle de chaque élément de ce tableau, sans qu’il soit nécessaire d’écrire une boucle. La sortie est affichée en notation scientifique en raison de la grande taille des nombres.

Pourquoi les résultats sont des nombres à virgule flottante

Regardez à nouveau les sorties ci-dessus : les factorielles reviennent sous forme de nombres à virgule flottante — 120. plutôt que 120, et les résultats plus grands en notation scientifique. C’est le comportement par défaut de special.factorial() : elle renvoie ses résultats sous forme de valeurs à virgule flottante, même lorsque chaque entrée est un entier.

Les nombres à virgule flottante ont une précision limitée, donc pour de très grandes factorielles, la valeur renvoyée est le nombre à virgule flottante représentable le plus proche plutôt que l’entier exact. Si vous avez besoin de résultats entiers exacts, passez exact=True :

arr = np.array([0, 1, 2, 3, 4, 5])
exact_factorials = special.factorial(arr, exact=True)

print(exact_factorials)

Output:

[  1   1   2   6  24 120]

Avec exact=True, les mêmes entrées renvoient des entiers sans point décimal, comme le montre la sortie. Choisissez la forme par défaut lorsque des résultats à virgule flottante sont acceptables pour votre calcul, et la forme exacte lorsque la valeur entière précise compte.

Conclusion

En résumé, la fonction special.factorial() de la bibliothèque SciPy calcule des factorielles élément par élément sur un tableau NumPy en Python. Que vous travailliez avec un petit tableau ou un grand, le même appel s’applique, et les résultats reviennent par défaut sous forme de nombres à virgule flottante, avec des résultats entiers exacts disponibles en passant exact=True. Comprendre comment calculer des factorielles aide non seulement dans les calculs mathématiques, mais ouvre également la voie à des sujets plus avancés en statistiques et en science des données.

FAQ

  1. Qu’est-ce que la factorielle d’un nombre ?
    La factorielle d’un entier non négatif n est le produit de tous les entiers positifs inférieurs ou égaux à n, notée n!.

  2. Comment puis-je installer SciPy ?
    Vous pouvez installer SciPy en utilisant pip avec la commande pip install scipy.

  3. Pourquoi les résultats sont-ils affichés sous forme de nombres à virgule flottante ?
    Par défaut, la fonction special.factorial() renvoie des valeurs à virgule flottante, même pour des entrées entières, de sorte que les grands résultats s’impriment en notation scientifique.

  4. Comment puis-je obtenir des factorielles entières exactes à la place ?
    Passez exact=True à la fonction special.factorial(), comme indiqué dans la section sur les nombres à virgule flottante ci-dessus.

  5. Quel format de sortie special.factorial() renvoie-t-il ?
    La sortie est renvoyée par défaut sous forme de nombres à virgule flottante.