Πώς να δημιουργήσετε πίνακες με ομοιόμορφα διαστήματα αριθμών

Αυτό το σεμινάριο θα σας διδάξει πώς να χρησιμοποιήσετε το NumPy linspace() για να δημιουργήσετε έναν πίνακα ομοιόμορφων αριθμών στην Python.

Θα μάθετε τη σύνταξη του NumPy linspace(), ακολουθούμενα από παραδείγματα που θα σας βοηθήσουν να κατανοήσετε πώς να το χρησιμοποιήσετε.

Σημείωση: Για να ακολουθήσετε αυτό το σεμινάριο, πρέπει να έχετε εγκαταστήσει την Python και το NumPy.

Δεν έχετε NumPy ακόμα; Συγκεντρώσαμε έναν γρήγορο οδηγό εγκατάστασης για εσάς.

Ας αρχίσουμε!

Εγκατάσταση και εισαγωγή NumPy

Πριν ξεκινήσουμε το σεμινάριο, ας εκτελέσουμε γρήγορα τα βήματα για την εγκατάσταση της βιβλιοθήκης NumPy.

⏩ Εάν έχετε ήδη εγκαταστήσει το NumPy, μεταβείτε στην επόμενη ενότητα.

  • Εάν χρησιμοποιείτε το Google Colab—ένα περιβάλλον φορητού υπολογιστή Jupyter που βασίζεται σε σύννεφο, μπορείτε να εισαγάγετε το NumPy και να ξεκινήσετε την κωδικοποίηση αμέσως. (συνιστάται για αυτό το σεμινάριο ✅)
  • Εάν θέλετε να δημιουργήσετε ένα τοπικό περιβάλλον εργασίας, προτείνω να εγκαταστήσετε τη διανομή Anaconda της Python. Το Anaconda συνοδεύεται από προεγκατεστημένα πολλά χρήσιμα πακέτα. Μπορείτε να κάνετε λήψη του προγράμματος εγκατάστασης για το λειτουργικό σας σύστημα. Η διαδικασία εγκατάστασης διαρκεί μόνο λίγα λεπτά.⌛
  • Εάν έχετε ήδη εγκαταστήσει την Python στον υπολογιστή σας, μπορείτε να εγκαταστήσετε τη διανομή Anaconda. Μπορείτε να χρησιμοποιήσετε το conda ή το pip για να εγκαταστήσετε και να διαχειριστείτε πακέτα. Μπορείτε να εκτελέσετε μία από τις ακόλουθες εντολές από τη γραμμή εντολών Anaconda για να εγκαταστήσετε το NumPy.
# Install NumPy using conda
conda install numpy

# Install NumPy using pip
pip install numpy

Ως επόμενο βήμα, εισαγάγετε το numpy με το ψευδώνυμο np εκτελώντας την ακόλουθη εντολή. Κάνοντας αυτό θα σας βοηθήσει να αναφέρετε το NumPy ως np—χωρίς να χρειάζεται να πληκτρολογείτε numpy κάθε φορά που αποκτάτε πρόσβαση σε ένα στοιχείο στη λειτουργική μονάδα.

import numpy as np

Στο εξής, θα χρησιμοποιήσουμε τον συμβολισμό κουκκίδων για να αποκτήσουμε πρόσβαση σε όλες τις συναρτήσεις στη βιβλιοθήκη NumPy ως εξής: np..

Η περίπτωση για ομοιόμορφα διαστήματα αριθμών

Όταν εργάζεστε με πίνακες NumPy, υπάρχουν φορές που θα χρειαστεί να δημιουργήσετε έναν πίνακα ομοιόμορφων αριθμών σε ένα διάστημα.

Πριν προχωρήσουμε περαιτέρω, ας δούμε γρήγορα μια άλλη παρόμοια συνάρτηση np.arange().

NumPy linspace() έναντι NumPy arange()

Εάν έχετε χρησιμοποιήσει το NumPy στο παρελθόν, πιθανότατα θα είχατε χρησιμοποιήσει τη np.arange() για να δημιουργήσετε έναν πίνακα αριθμών εντός ενός καθορισμένου εύρους.

Γνωρίζετε ότι το np.arange(start, stop, step) επιστρέφει μια σειρά αριθμών από την αρχή μέχρι το τέλος αλλά δεν περιλαμβάνει το stop, στα βήματα του βήματος. το προεπιλεγμένο μέγεθος βήματος είναι 1.

  Μαθήματα και πόροι για να ξεκινήσετε την καριέρα σας στον σχεδιασμό συνομιλιών

Ωστόσο, η αξία του βήματος μπορεί να μην είναι πάντα προφανής. Ας δούμε γιατί συμβαίνει αυτό.

Για παράδειγμα, εάν χρειάζεστε 4 ομοιόμορφα κατανεμημένους αριθμούς μεταξύ 0 και 1, γνωρίζετε ότι το μέγεθος του βήματος πρέπει να είναι 0,25. Αλλά αν χρησιμοποιείτε np.arange(), δεν περιλαμβάνει την τιμή διακοπής του 1. Επομένως, θα πρέπει να επιλέξετε ένα διάστημα που υπερβαίνει την τιμή διακοπής.

Η παρακάτω εικόνα απεικονίζει μερικά ακόμη παραδείγματα όπου χρειάζεστε έναν συγκεκριμένο αριθμό σημείων ομοιόμορφης απόστασης στο διάστημα [a, b].

Ομοιόμορφα σημεία σε ένα διάστημα

Το πρώτο μας παράδειγμα 4 σημείων ομοιόμορφης απόστασης [0,1] ήταν αρκετά εύκολο. Γνωρίζετε ότι το μέγεθος βήματος μεταξύ των σημείων πρέπει να είναι 0,25.

Ας υποθέσουμε ότι έχετε ένα ελαφρώς πιο εμπλεκόμενο παράδειγμα—όπου έπρεπε να αναφέρετε 7 ομοιόμορφα σημεία μεταξύ 1 και 33. Εδώ, το μέγεθος του βήματος μπορεί να μην είναι πολύ σαφές αμέσως. Μπορείτε, ωστόσο, να υπολογίσετε με μη αυτόματο τρόπο την τιμή του βήματος σε αυτήν την περίπτωση.

Ωστόσο, το np.linspace() είναι εδώ για να το κάνει ακόμα πιο απλό για εσάς! 😄

Χρησιμοποιήστε το Linspace NumPy

Όταν χρησιμοποιείτε το np.linspace(), χρειάζεται μόνο να καθορίσετε τον αριθμό των σημείων στο διάστημα—χωρίς να ανησυχείτε για το μέγεθος του βήματος. Και θα πάρετε πίσω τον πίνακα όπως θέλετε.

Με αυτό το κίνητρο, ας προχωρήσουμε στην εκμάθηση της σύνταξης του NumPy linspace() στην επόμενη ενότητα.

Σύνταξη του NumPy linspace()

Η σύνταξη για τη χρήση του NumPy linspace() φαίνεται παρακάτω:

np.linspace(start, stop, num, endpoint, retstep, dtype, axis)

Στην αρχή, η παραπάνω σύνταξη μπορεί να φαίνεται πολύ περίπλοκη με πολλές παραμέτρους.

Ωστόσο, οι περισσότερες από αυτές είναι προαιρετικές παράμετροι και θα φτάσουμε σε μια πολύ απλούστερη σύνταξη σε λίγα μόλις λεπτά.

Τώρα ας ξεκινήσουμε αναλύοντας την παραπάνω σύνταξη:

  • έναρξη και διακοπή είναι τα σημεία έναρξης και λήξης του διαστήματος, αντίστοιχα. Τόσο η αρχή όσο και η διακοπή μπορεί να είναι βαθμωτές ή πίνακες. Θα περιοριστούμε σε βαθμωτές τιμές έναρξης και λήξης σε αυτό το σεμινάριο.
  • num είναι ο αριθμός των ομοιόμορφων σημείων. Και είναι μια προαιρετική παράμετρος με προεπιλεγμένη τιμή 50.
  • Το τελικό σημείο είναι επίσης μια προαιρετική παράμετρος που μπορεί να είναι είτε True είτε False.
  • Η προεπιλεγμένη τιμή είναι True, που σημαίνει ότι το τελικό σημείο θα συμπεριληφθεί στο διάστημα από προεπιλογή. Ωστόσο, μπορείτε να το ορίσετε σε False για να εξαιρέσετε το τελικό σημείο.
  • Το retstep είναι μια ακόμη προαιρετική παράμετρος που παίρνει τα Booleans True ή False. Όταν οριστεί σε True, επιστρέφεται η τιμή βήματος.
  • dtype είναι ο τύπος δεδομένων των αριθμών στον πίνακα. Ο τύπος συνήθως συνάγεται ως float και δεν χρειάζεται να παρέχεται ρητά.
  • Ο άξονας είναι μια άλλη προαιρετική παράμετρος που υποδηλώνει τον άξονα κατά μήκος του οποίου πρέπει να αποθηκευτούν οι αριθμοί. Και αυτό είναι σχετικό μόνο όταν οι τιμές έναρξης και διακοπής είναι οι ίδιοι πίνακες.
  Πώς να μετακινήσετε το Microsoft Authenticator σε ένα νέο τηλέφωνο

▶️ Τι επιστρέφει λοιπόν η np.linspace();

Επιστρέφει έναν πίνακα Ν-διάστατων αριθμών με ομοιόμορφη απόσταση. Και αν το επαναληπτικό βήμα της παραμέτρου έχει οριστεί σε True, επιστρέφει επίσης το μέγεθος του βήματος.

Με βάση τη μέχρι τώρα συζήτηση, εδώ είναι μια απλοποιημένη σύνταξη για τη χρήση του np.linspace():

np.linspace(start, stop, num)

Η παραπάνω γραμμή κώδικα θα επιστρέψει έναν πίνακα num ομοιόμορφων αριθμών στο διάστημα [start, stop].

Τώρα που γνωρίζετε τη σύνταξη, ας αρχίσουμε να κωδικοποιούμε παραδείγματα.

Πώς να δημιουργήσετε πίνακες ομοιόμορφων διαστημάτων με το NumPy linspace()

#1. Ως πρώτο παράδειγμα, ας δημιουργήσουμε έναν πίνακα 20 αριθμών ομοιόμορφων κατανεμημένων στο διάστημα [1, 5].

Μπορείτε να καθορίσετε τις τιμές έναρξης, διακοπής και num ως ορίσματα λέξεων-κλειδιών. Αυτό φαίνεται στο κελί κώδικα παρακάτω:

import numpy as np
arr1 = np.linspace(start = 1,stop = 5,num = 20)
print(arr1)

# Output:
[1.         1.21052632 1.42105263 1.63157895 1.84210526 2.05263158
 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947
 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737
 4.78947368 5.        ]

Παρατηρήστε πώς οι αριθμοί στον πίνακα ξεκινούν από το 1 και τελειώνουν στο 5—συμπεριλαμβανομένων και των δύο σημείων λήξης. Επίσης, παρατηρήστε πώς οι αριθμοί, συμπεριλαμβανομένων των σημείων 1 και 5, αντιπροσωπεύονται ως float στον πίνακα που επιστρέφεται.

#2. Στο προηγούμενο παράδειγμα, είχατε μεταβιβάσει τις τιμές για start, stop και num ως ορίσματα λέξεων-κλειδιών. Εάν μεταβιβάσετε τα ορίσματα με τη σωστή σειρά, μπορείτε επίσης να τα χρησιμοποιήσετε ως ορίσματα θέσης με μόνο τις τιμές, όπως φαίνεται παρακάτω.

import numpy as np
arr2 = np.linspace(1,5,20)
print(arr2)

# Output:
[1.         1.21052632 1.42105263 1.63157895 1.84210526 2.05263158
 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947
 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737
 4.78947368 5.        ]

#3. Τώρα ας δημιουργήσουμε έναν άλλο πίνακα όπου θέτουμε το επαναληπτικό βήμα σε True.

Αυτό σημαίνει ότι η συνάρτηση θα επιστρέψει τώρα τόσο τον πίνακα όσο και το βήμα. Και μπορούμε να τις αποσυσκευάσουμε σε δύο μεταβλητές arr3: τον πίνακα και step_size: το μέγεθος του βήματος που επιστράφηκε.

Το παρακάτω κελί κώδικα εξηγεί πώς μπορείτε να το κάνετε.

import numpy as np
arr3, step_size = np.linspace(1,5,20,retstep = True)
print(arr3)

# Output:
[1.         1.21052632 1.42105263 1.63157895 1.84210526 2.05263158
 2.26315789 2.47368421 2.68421053 2.89473684 3.10526316 3.31578947
 3.52631579 3.73684211 3.94736842 4.15789474 4.36842105 4.57894737
 4.78947368 5.        ]

# Output:
print(step_size)
0.21052631578947367

#4. Ως τελευταίο παράδειγμα, ας ορίσουμε το τελικό σημείο σε False και ας ελέγξουμε τι συμβαίνει.

import numpy as np
arr4 = np.linspace(1,5,20,endpoint = False)
print(arr4)

# Output:
[1.  1.2 1.4 1.6 1.8 2.  2.2 2.4 2.6 2.8 3.  3.2 3.4 3.6 3.8 
4.  4.2 4.4 4.6 4.8]

Στον πίνακα που επιστράφηκε, μπορείτε να δείτε ότι το 1 περιλαμβάνεται, ενώ το 5 δεν περιλαμβάνεται. Και η τελευταία τιμή στον πίνακα συμβαίνει να είναι 4,8, αλλά έχουμε ακόμα 20 αριθμούς.

  Διορθώστε το πρόβλημα με το αργό πρόβλημα του Amazon Fire Stick

Μέχρι στιγμής, έχουμε δημιουργήσει μόνο πίνακες ομοιόμορφων αριθμών. Στην επόμενη ενότητα, ας οπτικοποιήσουμε σχεδιάζοντας αυτούς τους αριθμούς.

Πώς να σχεδιάσετε ομοιόμορφα διαστήματα αριθμών σε ένα διάστημα

Σε αυτήν την ενότητα, ας επιλέξουμε [10,15] ως το διάστημα ενδιαφέροντος. Στη συνέχεια, χρησιμοποιήστε το np.linspace() για να δημιουργήσετε δύο πίνακες, ο καθένας με 8 και 12 σημεία, αντίστοιχα.

Αφού ολοκληρωθεί αυτό, μπορούμε να χρησιμοποιήσουμε τη συνάρτηση σχεδίασης από τη βιβλιοθήκη matplotlib για να τα σχεδιάσουμε.

Για λόγους σαφήνειας, θα σφίξουμε τους δύο πίνακες N1 = 8 και N2 = 12 ομοιόμορφα απέχοντα σημεία σε διαφορετικές θέσεις κατά μήκος του άξονα y.

Το παρακάτω απόσπασμα κώδικα το δείχνει αυτό.

import numpy as np
import matplotlib.pyplot as plt

N1 = 8
N2 = 12

a = 10
b = 15

y1 = np.zeros(N1)
y2 = np.zeros(N2)

x1 = np.linspace(a, b, N1)
x2 = np.linspace(a, b, N2)

plt.plot(x1, y1-0.5, 'o')
plt.plot(x2, y2 + 0.5, 'o')

plt.ylim([-1, 1])

plt.title(f'Evenly Spaced Numbers in the Interval [{a},{b}]')
plt.xlabel('Interval')

plt.show()

Η δημιουργία ομοιόμορφων σημείων μπορεί να είναι χρήσιμη όταν εργάζεστε με μαθηματικές συναρτήσεις. Θα μάθουμε για αυτό στην επόμενη ενότητα.

Πώς να χρησιμοποιήσετε το NumPy linspace() με μαθηματικές συναρτήσεις

Αφού δημιουργήσετε έναν πίνακα ομοιόμορφων αριθμών χρησιμοποιώντας το np.linspace(), μπορείτε να υπολογίσετε τις τιμές των μαθηματικών συναρτήσεων στο διάστημα.

Στο παρακάτω κελί κώδικα, δημιουργείτε πρώτα 50 ομοιόμορφα κατανεμημένα σημεία στο διάστημα 0 έως 2π. Στη συνέχεια, δημιουργήστε τον πίνακα y χρησιμοποιώντας np.sin() στον πίνακα x. Σημειώστε ότι μπορείτε να παραλείψετε την παράμετρο num, καθώς η προεπιλεγμένη τιμή είναι 50. Θα συνεχίσουμε να τη χρησιμοποιούμε ρητά.

Ως επόμενο βήμα, μπορείτε να σχεδιάσετε τη συνάρτηση ημιτόνου στο διάστημα [0, 2π]. Για να το κάνετε αυτό, μπορείτε να χρησιμοποιήσετε matplotlib, όπως στο προηγούμενο παράδειγμα. Συγκεκριμένα, η συνάρτηση plot() στο matplotlib.pytplot χρησιμοποιείται για τη δημιουργία ενός σχεδίου γραμμής.

import numpy as np
import matplotlib.pyplot as plt

N = 50

a = 0.0
b = 2*np.pi

x = np.linspace(a, b, N)
y = np.sin(x)

plt.plot(x, y, marker = "o")

plt.ylim([-1, 1])
plt.title(f'y = sin(x)')
plt.xlabel('x ---->')

plt.show()

Τώρα, εκτελέστε τον παραπάνω κώδικα ορίζοντας το N ίσο με 10. Θα λάβετε το διάγραμμα όπως φαίνεται στο παρακάτω σχήμα.

Και μπορείτε να δείτε ότι η πλοκή δεν είναι πολύ ομαλή—καθώς έχετε επιλέξει μόνο 10 πόντους στο διάστημα.

Γενικά, όσο μεγαλύτερος είναι ο αριθμός των σημείων που εξετάζετε, τόσο πιο ομαλή θα είναι η γραφική παράσταση της συνάρτησης.

συμπέρασμα

Εδώ είναι μια περίληψη των όσων μάθαμε.

  • Το np.linspace(start, stop, num) επιστρέφει έναν πίνακα num αριθμών με ομοιόμορφη απόσταση στο διάστημα [start, stop].
  • Ορίστε το τελικό σημείο της προαιρετικής παραμέτρου σε False για να εξαιρέσετε τη διακοπή και ορίστε το διάστημα σε[startstop)[startstop)
  • Ορίστε το επαναληπτικό βήμα σε True προαιρετικά για να λάβετε το μέγεθος του βήματος.
  • Δημιουργήστε πίνακες με ομοιόμορφη απόσταση χρησιμοποιώντας np.linspace() και, στη συνέχεια, χρησιμοποιήστε τον πίνακα με μαθηματικές συναρτήσεις.

Ελπίζω να καταλάβατε τώρα πώς λειτουργεί η np.linspace(). Μπορείτε να επιλέξετε να εκτελέσετε τα παραπάνω παραδείγματα στο σημειωματάριο Jupyter. Ρίξτε μια ματιά στον οδηγό μας για το σημειωματάριο Jupyter ή άλλες εναλλακτικές λύσεις Jupyter που μπορείτε να εξετάσετε.

Τα λέμε σύντομα σε ένα άλλο σεμινάριο Python. Μέχρι τότε, συνεχίστε την κωδικοποίηση!😀