HOWTO · NumPy

NumPy Factorial

Erfahren Sie, wie Sie die Fakultät der Elemente eines NumPy-Arrays mit der Funktion special.factorial() von SciPy in Python berechnen, mit Codebeispielen und Erklärungen der Ergebnisse, einschließlich der Frage, warum die Werte als Gleitkommazahlen zurückgegeben werden und wie Sie stattdessen exakte ganzzahlige Ergebnisse anfordern können.

Auf dieser Seite

Die Berechnung der Fakultät von Zahlen ist eine häufige Aufgabe in Mathematik und Programmierung, insbesondere in Bereichen wie Statistik und Kombinatorik. In Python können wir die Fakultät der Elemente in einem NumPy-Array mit der Funktion special.factorial() aus der SciPy-Bibliothek berechnen.

Diese Funktion führt die Berechnung elementweise über ein Array aus. Ob Sie mit einer kleinen Menge von Zahlen oder einem großen Array arbeiten: Derselbe Aufruf wendet die Fakultät auf jedes Element zugleich an.

In diesem Artikel werden wir untersuchen, wie man die Funktion special.factorial() verwendet, und klare Beispiele und Erklärungen bereitstellen, die Ihnen helfen, dieses wesentliche Konzept zu erfassen.

Was ist eine Fakultät?

Bevor wir in den Code eintauchen, ist es entscheidend zu verstehen, was eine Fakultät ist. Die Fakultät einer nicht negativen ganzen Zahl n, bezeichnet als n!, ist das Produkt aller positiven ganzen Zahlen kleiner oder gleich n. Zum Beispiel ist 5! gleich 5 × 4 × 3 × 2 × 1, was 120 ergibt. Fakultäten werden häufig in Permutationen, Kombinationen und anderen mathematischen Berechnungen verwendet.

In der Programmierung werden Fakultäten oft für jedes Element eines Arrays auf einmal benötigt. Hier kommen NumPy und SciPy ins Spiel: special.factorial() wendet die Operation elementweise über ein Array an.

Die Funktion special.factorial() von SciPy verwenden

Die Funktion special.factorial() aus der SciPy-Bibliothek wurde entwickelt, um die Fakultät jedes Elements in einem Array zu berechnen. Sie führt die Operation elementweise aus, sodass ein einziger Aufruf ein Array beliebiger Größe handhabt.

Um diese Funktion zu verwenden, müssen Sie zuerst die SciPy-Bibliothek installieren, falls Sie dies noch nicht getan haben. Dies können Sie mit pip tun:

pip install scipy

Sobald Sie SciPy installiert haben, können Sie die Funktion special.factorial() verwenden. Nachfolgend finden Sie ein einfaches Beispiel, das zeigt, wie man die Fakultät eines Arrays von ganzen Zahlen berechnet.

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.]

In diesem Beispiel importieren wir zuerst die erforderlichen Bibliotheken: NumPy und das special-Modul von SciPy. Wir erstellen ein NumPy-Array, das ganze Zahlen von 0 bis 5 enthält. Indem wir dieses Array an die Funktion special.factorial() übergeben, erhalten wir die Fakultäten dieser Zahlen. Die Ausgabe zeigt die jeweiligen Fakultäten als Gleitkommazahlen, was das Standardverhalten der Funktion ist.

Fakultäten für große Arrays berechnen

Derselbe Aufruf funktioniert unverändert für größere Arrays.

Sehen wir uns ein Beispiel an, in dem wir die Fakultät für einen größeren Zahlenbereich berechnen.

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]

In diesem Fall erstellen wir mit np.arange() ein Array, das ganze Zahlen von 10 bis 20 enthält. Die Funktion special.factorial() berechnet die Fakultät für jedes Element in diesem Array, ohne dass eine Schleife geschrieben werden müsste. Die Ausgabe wird aufgrund der Größe der Zahlen in wissenschaftlicher Notation angezeigt.

Warum die Ergebnisse Gleitkommazahlen sind

Betrachten Sie die obigen Ausgaben noch einmal: Die Fakultäten kommen als Gleitkommazahlen zurück — 120. statt 120, und die größeren Ergebnisse in wissenschaftlicher Notation. Das ist das Standardverhalten von special.factorial(): Die Funktion gibt ihre Ergebnisse als Gleitkommawerte zurück, selbst wenn jede Eingabe eine ganze Zahl ist.

Gleitkommazahlen haben eine begrenzte Genauigkeit, sodass der zurückgegebene Wert bei sehr großen Fakultäten die nächste darstellbare Gleitkommazahl ist und nicht die exakte ganze Zahl. Wenn Sie exakte ganzzahlige Ergebnisse benötigen, übergeben Sie 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]

Mit exact=True geben dieselben Eingaben ganze Zahlen ohne Dezimalpunkt zurück, wie die Ausgabe zeigt. Wählen Sie die Standardform, wenn Gleitkommaergebnisse für Ihre Berechnung akzeptabel sind, und die exakte Form, wenn der präzise ganzzahlige Wert zählt.

Fazit

Zusammenfassend berechnet die Funktion special.factorial() aus der SciPy-Bibliothek Fakultäten elementweise über ein NumPy-Array in Python. Ob Sie mit einem kleinen oder einem großen Array arbeiten: Derselbe Aufruf gilt, und die Ergebnisse kommen standardmäßig als Gleitkommazahlen zurück, wobei exakte ganzzahlige Ergebnisse durch Übergabe von exact=True verfügbar sind. Zu verstehen, wie man Fakultäten berechnet, hilft nicht nur bei mathematischen Berechnungen, sondern öffnet auch Türen zu fortgeschritteneren Themen in Statistik und Datenwissenschaft.

FAQ

  1. Was ist die Fakultät einer Zahl?
    Die Fakultät einer nicht negativen ganzen Zahl n ist das Produkt aller positiven ganzen Zahlen kleiner oder gleich n, bezeichnet als n!.

  2. Wie installiere ich SciPy?
    Sie können SciPy mit pip über den Befehl pip install scipy installieren.

  3. Warum werden die Ergebnisse als Gleitkommazahlen angezeigt?
    Standardmäßig gibt die Funktion special.factorial() Gleitkommawerte zurück, selbst bei ganzzahligen Eingaben, sodass große Ergebnisse in wissenschaftlicher Notation ausgegeben werden.

  4. Wie erhalte ich stattdessen exakte ganzzahlige Fakultäten?
    Übergeben Sie exact=True an die Funktion special.factorial(), wie im Abschnitt über Gleitkommazahlen oben gezeigt.

  5. Welches Ausgabeformat gibt special.factorial() zurück?
    Die Ausgabe wird standardmäßig als Gleitkommazahlen zurückgegeben.