Διάλεξη 5ης Δεκεμβρίου 2016

Συμπερίληψη σε λίστα (list comprehension). Γραφικές παραστάσεις

Αν θέλαμε, για παράδειγμα, να αποθηκεύσουμε στη λίστα L τα τετράγωνα των αριθμών από το ένα ως το δέκα, θα γράφαμε


L = []
for i in range(1,11):
    L.append(i**2)

H Python παρέχει ένα ακόμα τρόπο για τη κατασκευή της ίδιας λίστας, τη λεγόμενη συμπλερίληψη (list comprehension), το συντακτικό της οποίας μοιάζει πολύ με τον μαθηματικό τρόπο περιγραφής συνόλων. Για να φτιάξουμε την ίδια λίστα αρκεί να γράψουμε


L = [ i**2 for i in range(1,11) ]

Για να επιλέξουμε από τη λίστα L τους άρτιους αριθμούς αρκεί να γράψουμε M = [ x for x in L if x%2 == 0 ]. Για να φτιάξουμε τις Πυθαγόρειες τριάδες $(x, y, z)$ με $x, y, z \lt 30$ και $x^2 + y^2 = z^2$ αρκεί να γράψουμε


[ (x,y,z) for x in range(1,30) for y in range(x,30) for z in range(y,30) if x**2 + y**2 == z**2 ]

Για να φτιάξουμε το καρτεσιανό γινόμενο δύο συνόλων L = ['red', 'green', 'blue'] και M = ['bicycle', 'tree', 'car'] δεν έχουμε παρά να γράψουμε


LxM = [ (x,y) for x in L for y in M ]

Γραφικές παραστάσεις

Η Python παρέχει, μέσω της βιβλιοθήκης matplotlib, εξαιρετικής ποιότητας γραφικές παραστάσεις. Εκτενείς πληροφορίες για τη βιβλιοθήκη matplotlib μπορεί να βρεί κανείς στον ιστότοπο http://matplotlib.org/. Εδώ θα αρκεστούμε σε μερικά παραδείγματα που ανδεικνύουν όμως τις δυνατότητες της στγκεκριμένης βιβλιοθήκης.

Για να ζωγραφίσουμε τη γραφική παράσταση της συνάρτησης $f(x) = x^2$ στο διάστημα $[0, 4]$ δεν έχουμε παρά να γράψουμε


import numpy as np
import matplotlib.pyplot as plt
t = np.linspace(0.0, 4.0, num=50)
plt.plot(t, t**2)
plt.show()

Μπορούμε να προσθέσουμε σημεία στη γραφική παράσταση και ετικέτες στους άξονες αλλά και κάποιο τίτλο στη γραφική παράσταση χρησιμοποιώντας τις συναρτήσεις xlabel, ylable και title. Ο πλήρης κώδικας φαίνεται παρακάτω. Η συνάρτηση linspace από τη βοηθητική βιβλιοθήκη numpy παράγει ένα διαμερισμό του διαστήματος με 50 σημεία (συμπεριλαμβανομένων και των άκρων) τα οποία χρησιμοποιούμε για να ζωγραφίσουμε τη γραφική παράσταση της συνάρτησης. Επίσης, προσθέτουμε μπλέ κύκλους σε άλλα 25 σημεία ομοοόμορφα κατανεμημένα στο διάστημα $[0, 4]$.


import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(0.0, 4.0, num=50)
p = np.linspace(0.0, 4.0, num=25)

plt.plot(t, t**2, p, p**2, 'bo')

plt.xlabel('$x$')
plt.ylabel('$f(x)$')
plt.title('Plot of $f(x) = x^2$')

plt.show()

Μπορούμε ακόμα να έχουμε πολλαπλές γραφικές παραστάσεις στο ίδιο "παράθυρο" γραφικών αλλά και να αποθηκεύσουμε κάποια γραφική παράσταση σε ένα αρχείο για μετέπειτα χρήση. Αυτό μπορεί να γίνει είτε κατ' ευθείαν από το διαδραστικό περιβάλλον της Python είτε με την εντολή savefig της βιβλιοθήκης matplotlib. Πληροφορίες για την εντολή savefig μπορεί να βρεί κανείς στη διεύθυνση http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.savefig. Το πρόγραμμα με το οποίο παραγάγαμε στις διπλανές γραφικές παραστάσεις φαίνεται παρακάτω:


import numpy as np
import matplotlib.pyplot as plt

def f(t):
    return np.exp(-t) * np.cos(2*np.pi*t)

t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)

plt.figure(1)

plt.subplot(211)
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')

plt.subplot(212)
plt.plot(t2, np.cos(2*np.pi*t2), 'r--')

plt.show()