Globale Verständnisfragen

Zum Abschluss dieses Lernmoduls wollen wir noch einmal die wichtigsten Erkenntnisse und Informationen, die Sie aus diesem Lernmodul mitnehmen sollen, mit einigen zusammenfassenden Fragen verschiedenen Typs abfragen und wiederholen. Sie können diese Fragen als "inverted classroom" verstehen, und damit als komplementär zu den vorgeschlagenen größeren Übungen im nächsten Abschnitt. Die Idee ist, dass Sie sich hier überlegen können, ob Sie die gestellten Fragen selbst beantworten können. Falls es noch Unklarheiten gibt, können Sie die entsprechenden Antworten nochmals direkt in den passenden Abschnitten des Lernmoduls rekapitulieren. Dementsprechend sind die Antworten auch absichtlich skizzenhaft. Bitte zögern Sie nicht, bei konkreten Fragen einen der Kanäle zur Hilfe zur Selbsthilfe zu nutzen. 

Vokabeltest

    Was ist NumPy?
        NumPy ist DAS Python-Paket für numerische Berechnungen, insbesondere in Kombination mit dem Paket SciPy.
    Was ist SymPy?
        SymPy ist ein Python-Paket für symbolische, d.h. exakte Berechnungen.
    Was ist matplotlib?
        matplotlib ist ein Python-Paket zur Erstellung ansprechender Visualisierungen und Animationen.
    Was ist ein ndarray?
        Das ndarray ist die zentrale Datenstruktur in NumPy. Ein 1D-ndarray ist ein Vektor im mathematischen Sinne, ein 2D-ndarray eine Matrix.
    Was ist sind symbols?
        Symbols übersetzen Python-Variablen in Symbole, mit denen exakt gerechnet wird.
    Welche Attribute eines Plots steuern xlim und label?
        xlim begrenzt den Wertebereich der x-Achse eines Plots, analog ylim für die y-Achse. 
        label ist ein optionales Attribut des plot() Befehls und dient dazu, einer Kurve in einem Plot einen Namen zu geben. Dieser Name taucht dann automatisch in der Legende auf, wenn diese per legend() angeschaltet wird. 


Syntaxfragen

    Wie definiert man in NumPy die 2x2 Matrix mit den Einträgen 1,2,3,4 (von links oben nach rechts unten)?
        A = np.array( [1,2],[3,4] )
    Wie definiert man den Ausdruck 5x^2 + 3x - 42 in SymPy?
        Zuerst stellen wir sicher, dass x ein Symbol ist: x = Symbols('x')
        Danach schreiben wir den Ausdruck einfach auf: expression = 5*x**2 + 3*x - 42
        Details finden Sie in diesem Abschnitt und im nächsten Fragenblock.
    Wie plotten Sie den Graph dieser Funktion nur mit NumPy und matplotlib?
        x_vals = np.linspace(0,2)                             # Auswertungspunkte für den Plot
        f = sp.lambdify(x,expr,"numpy")                # Übersetzung der SymPy-Formel in eine NumPy-taugliche Lambda-Funktion
        plt.plot(x_vals, f(x_vals))                              # Plotten mittels matplotlib
    Was leistet der NumPy Befehl linspace?
        Dieser Befehl akzeptiert drei Argumente: linspace(a,b,step). a und b sind hierbei die Endpunkte eines Intervalls, beide Endpunkte sind inklusive. step ist die (optionale) Anzahl an Zwischenpunkten, die vom linspace Befehl zwischen a und b erzeugt werden.

        
Einfache Verständnisfragen

    Warum sollten in NumPy Funktionen immer vektorisiert sein?
        Die banale Autwort lautet: Weil NumPy so viel schneller rechnet. Der technische Hintergrund ist, dass vektorisierte Berechnungen auf sogenannte Vektorregister in den Prozessoren gemappt werden. Aktuelle Prozessoren können bspw. identische Operationen auf 512 bit langen Vektoren in einem Schritt ausführen. 512 bit entsprechen 8 Gleitkomma-Zahlen in Standardgenauigkeit.
    Wie können Sie mit Bordmitteln für gängige Rechenoperationen die Vektorisierung sicherstellen?
        Ganz einfach: Wir nutzen die dafür vorgesehenen Funktionen, d.h. bspw. np.sin() etc.
    Erklären Sie, wie Sie aus SymPy heraus Funktionen plotten können. Demonstrieren Sie dies, indem Sie ein Polynom und seine ersten beiden Ableitungen in SymPy berechnen und dann mit matplotlib plotten.
        Diese Frage wurde bereits im vorherigen Block ähnlich gestellt. In der Codesammlung finden Sie eine Beispielimplementierung.
    Erzeugen Sie eine 5x5 Matrix mit zufälligen Einträgen. Extrahieren Sie dann die Diagonale der Matrix. 
        Auch hierzu finden Sie eine Beispielimplementierung in der Codesammlung.


Transferfragen

    Wie definiert man in SymPy die Matrix aus der ersten Syntaxfrage?
        Hierzu finden Sie unten eine kommentierte Beispielimplementierung.
    Geben Sie ein Beispiel jenseits der Lerneinheit an, für das ein Scatterplot die beste Darstellungsform ist.
        Blöde Antwort: Benutzen Sie Ihre Fantasie, bzw. die Inhalte Ihres Fachstudiums.
    Geben Sie ein Beispiel jenseits der Lerneinheit an, für das ein Histogramm die beste Darstellungsform ist.
        Dito.
    Machen Sie sich schlau, wie die Funktion numpy.vectorize() funktioniert. Erklären Sie dann, warum sie diese Funktion bspw. bei +-*/ und sin nicht benötigen.
        Diese Funktion arbeitet ähnlich wie die Funktion lambdify() aus dem Paket SymPy. Weil die arithmetischen Operationen auf ndarrays sowie die Funktionen wie np.exp() oder np.sin() bereits vektorisiert sind, müssen sie nicht manuell vektorisiert werden. Wichtig ist: Dasselbe gilt für Funktionen, die aus solchen Operationen (und nur aus solchen Operationen) zusammengesetzt sind, wie bspw. die Addition zweier Auswertungen trigonometrischer Funktionen.
