Jupyter notebook Applied_Maths_II_Labcourse_04.ipynb
Εφαρμοσμένα Μαθηματικά ΙΙ
Εργαστηριακή Άσκηση 4: Βασικές Επιστημονικές Βιβλιοθήκες της Python
Ελευθέριος Μαμάτας ([email protected])
Το σημειωματάριο της τέταρτης εργαστηριακής άσκησης παρουσιάζει τις παρακάτω βασικές επιστημονικές βιβλιοθήκες της python.
numpy: http://numpy.scipy.org - Αριθμητικές μέθοδοι
scipy: http://www.scipy.org - Γενική επιστημονική βιβλιοθήκη
Το σημειωματάριο δεν ακολουθεί τον παραδοσιακό τρόπο που γράφουμε κώδικα, δηλαδή σε αρχεία κειμένου. Αποθηκεύεται με βάση τη μορφοποίηση JSON. Με αυτό τον τρόπο μπορούμε να έχουμε σε ένα ενιαίο αρχείο μορφοποιημένο κείμενο, κώδικα και τα αποτελέσματα του κώδικα. Τα σημειωματάρια εκτελούνται σε διακομιστές που τρέχουν εφαρμογές, όπως το jupyter ή το IPython notebook. Πέρα από αυτή τη διαφορά, ο κώδικας της Python είναι ο ίδιος.
Υπενθυμίζουμε οτι ο κώδικας εκτελείται με την επιλογή του κελιού και το συνδυασμό πλήκτρων Shift + Enter. Σε περίπτωση που δεν εκτελεστεί, πατήστε το πλήκτρο F5 (Refresh) και ξαναπροσπαθήστε.
Εισαγωγή στο πακέτο numpy
Το πακέτο numpy (module) χρησιμοποιείται σχεδόν σε όλους τους αριθμητικούς υπολογισμούς χρησιμοποιώντας την Python. Είναι ένα πακέτο που παρέχει υψηλής-απόδοσης δομές δεδομένων, όπως διανύσματα και πίνακες. Έχει υλοποιηθεί στις γλώσσες C και Fortran και χαρακτηρίζεται από πολύ καλή απόδοση όταν πραγματοποιεί υπολογισμούς με διανύσματα και πίνακες.
Για να χρησιμοποιήσετε το numpy θα πρέπει να το "εισάγετε" με την παρακάτω εντολή:
Ακολουθούν κάποια παραδείγματα χρήσης του πακέτου numpy.
Δημιουργία πινάκων τύπου array με το numpy
Υπάρχουν εναλλακτικοί τρόποι δημιουργίας ενός πίνακα τύπου array στο numpy arrays, π.χ. από:
μία λίστα ή μια πλειάδα (tuple) της Python
χρησιμοποιώντας συναρτήσεις δημιουργίας πινάκων του numpy, όπως οι
arange,linspace, κ.α.ανάγνωση από αρχεία δεδομένων
Για παράδειγμα, για τη δημιουργία ενός νέου διανύσματος ή πίνακα τύπου array από μια λίστα της Python, μπορούμε να χρησιμοποιήσουμε τη συνάρτηση numpy.array:
Υπάρχει πρακτική δυσκολία να ορίσουμε μεγάλους πίνακες χειρωνακτικά, χρησιμοποιώντας λίστες της Python. Μπορούμε να χρησιμοποιήσουμε μια από τις πολλές συναρτήσεις του πακέτου numpy, οι οποίες δημιουργούν πίνακες διαφορετικών μορφών. Μερικά παραδείγματα ακολουθούν:
Tυχαία δεδομένα
Η συνάρτηση rand δημιουργεί πίνακα με τυχαίους αριθμούς που ακολουθούν την ομοιόμορφη κατανομή (uniform) του διαστήματος [0,1]. Οι είσοδοι της συνάρτησης εκφράζουν το μέγεθος του πίνακα και όχι το διάστημα της κατανομής.
Διαγώνιοι πίνακες
Αναφορά σε στοιχεία του πίνακα χρησιμοποιώντας δείκτες
Μπορούμε να αναφερθούμε σε στοιχεία ενός πίνακα χρησιμοποιώντας τις αγκύλες και κατάλληλους δείκτες:
Εαν παραλείψουμε δείκτες πίνακα πολλών διαστάσεων, επιστρέφει τις υπόλοιπες διαστάσεις του (π.χ. έναν πίνακα N-1 διαστάσεων αν παραλείψουμε μια διάσταση).
Μπορούμε να πετύχουμε το ίδιο χρησιμοποιώντας το χαρακτήρα : αντί ενός από τους δείκτες:
Μπορούμε να ορίσουμε νέες τιμές σε στοιχεία ενός πίνακα, χρησιμοποιώντας τους επιθυμητούς δείκτες:
Πολλαπλασιασμός στοιχείου-προς-στοιχείο πινάκων τύπου array
Όταν προσθέτουμε, αφαιρούμε, πολλαπλασιάζουμε και διαιρούμε πίνακες τύπου array μεταξύ τους, η προκαθορισμένη συμπεριφορά είναι να πραγματοποιούνται οι αντίστοιχες πράξεις στοιχείου-προς-στοιχείο αντί της αλγεβρικής πράξης πινάκων:
Άλγεβρα πινάκων
Πως όμως πολλαπλασιάζουμε δύο αλγεβρικούς πίνακες μεταξύ τους; Υπάρχουν δύο τρόποι. Μπορούμε να χρησιμοποιήσουμε τη συνάρτηση dot, η οποία εφαρμόζει πολλαπλασιασμούς πίνακα-με-πίνακα, πίνακα-με-διάνυσμα ή εσωτερικό γινόμενο διανυσμάτων, με την αντίστοιχη χρήση δύο παραμέτρων:
Εναλλακτικά μπορούμε να μετατρέψουμε ένα αντικείμενο τύπου πίνακα array σε αντικείμενο τύπου πίνακα matrix. Αυτό μεταβάλλει τη συμπεριφορά των βασικών αριθμητικών τελεστών +, -, *, ώστε να υλοποιούν άλγεβρα πινάκων.
Παράδειγμα: Πολλαπλασιάστε δύο διαφορετικούς πίνακες διάστασης 3x3 με τυχαίους αριθμούς, οι οποίοι ακολουθούν την ομοιόμορφη κατανομή στο διάστημα [0, 1]. Τυπώστε τους δύο πίνακες και το γινόμενο τους.
Επιπρόσθετο διάβασμα για το NumPy
http://numpy.scipy.org - Επίσημη ιστοσελίδα του
Numpyhttp://scipy.org/Tentative_NumPy_Tutorial - Εντατική εισαγωγή στο
Numpyhttp://scipy.org/NumPy_for_Matlab_Users - Οδηγός του
Numpyγια χρήστες του MATLAB.
Εισαγωγή στο πακέτο SciPy
Το πακέτο SciPy επεκτείνει το πακέτο χαμηλότερου επιπέδου NumPy για προβλήματα με πίνακες πολλών διαστάσεων, προσφέροντας μεγάλο αριθμό επιστημονικών αλγορίθμων υψηλού επιπέδου. Ακολουθούν μερικά από τα θέματα που καλύπτει το SciPy:
Ειδικές συναρτήσεις (scipy.special)
Ολοκληρώματα (scipy.integrate)
Βελτιστοποίηση (scipy.optimize)
Παρεμβολή (scipy.interpolate)
Μετασχηματισμοί Fourier (scipy.fftpack)
Επεξεργασία σήματος (scipy.signal)
Γραμμική άλγεβρα (scipy.linalg)
Προβλήματα ιδιοτιμών για αραιούς πίνακες (scipy.sparse)
Στατιστική (scipy.stats)
Πολυδιάστατη επεξεργασία εικόνας (scipy.ndimage)
Είσοδος/έξοδος (scipy.io)
Κάθε ένα από αυτά τα υποαρθρώματα (submodules) παρέχει έναν αριθμό συναρτήσεων και κλάσεων που σχετίζονται με την επίλυση των αντίστοιχων προβλημάτων.
Θα δούμε κάποια παραδείγματα στη συνέχεια.
Για την πρόσβαση στο πακέτο SciPy, "εισάγουμε" το αντίστοιχο άρθρωμα.
Σε περίπτωση που θέλουμε να χρησιμοποιήσουμε ένα υποσύνολο του πακέτου SciPy, μπορούμε να το "εισάγουμε" επιλεκτικά. Για παράδειγμα, για να "εισάγουμε" το πακέτο της γραμμικής άλγεβρας με το όνομα la, μπορούμε:
Γραμμική άλγεβρα
Το υποάρθρωμα της γραμμικής άλγεβρας συμπεριλαμβάνει συναρτήσεις που σχετίζονται με πίνακες, όπως για επίλυση γραμμικών εξισώσεων, λύτες ιδιοτιμών, συναρτήσεις πινάκων κ.α.
Οι οδηγίες χρήσης του υποαρθρώματος γραμμικής άλγεβρας μπορούν να βρεθούν εδώ: http://docs.scipy.org/doc/scipy/reference/linalg.html
Ακολουθούν παραδείγματα που χρησιμοποιούν κάποιες από αυτές τις συναρτήσεις:
Γραμμικά συστήματα εξισώσεων
Τα γραμμικά συστήματα εξισώσεων σε μορφή πίνακα:
όπου ένας πίνακας και διανύσματα, μπορούν να επιλυθούν με τη μέθοδο solve:
Λειτουργίες πινάκων
Παράδειγμα: Επιλύστε την παρακάτω εξίσωση
όπου είναι πίνακες διάστασης 3x3 με τυχαίες τιμές. Δοκιμάστε δύο μεθόδους (τη μέθοδο solve και μέσω του αντίστροφου πίνακα του A).
Eπαληθεύστε τα αποτελέσματα. Γιατί δεν προκύπτουν μηδενικές τιμές;
Επιπρόσθετο διάβασμα για το πακέτο SciPy
http://www.scipy.org - Η επίσημη ιστοσελίδα του
SciPy.http://docs.scipy.org/doc/scipy/reference/tutorial/index.html - Εισαγωγή στη χρήση του
SciPy.https://github.com/scipy/scipy/ - Ο πηγαίος κώδικας του
SciPy.