Τι είναι το np.where στην Python;
Μπορείτε να χρησιμοποιήσετε τη συνάρτηση np.where() για να εργαστείτε με πίνακες NumPy στην Python. Οι διανυσματικές λειτουργίες της την καθιστούν πιο αποτελεσματική από τις μεθόδους που βασίζονται σε βρόχους.
Τι κάνει το np.where;
Η συνάρτηση Python np.where() είναι μια ισχυρή μέθοδος από τη βιβλιοθήκη NumPy και χρησιμοποιείται για την επιλογή στοιχείων από έναν πίνακα. Προσδιορίζει και εξάγει στοιχεία που πληρούν μια συγκεκριμένη συνθήκη και στη συνέχεια επιστρέφει δείκτες ή τιμές που αντιστοιχούν σε αυτή τη συνθήκη.
Η συνάρτηση χρησιμοποιείται σε διάφορους τομείς, όπως η επεξεργασία δεδομένων, οι επιστημονικοί υπολογισμοί, η μηχανική μάθηση και η ανάλυση δεδομένων. Στην επεξεργασία δεδομένων, np.where() επιτρέπει το φιλτράρισμα δεδομένων και την αντικατάσταση τιμών σε πίνακες.
Ποια είναι η σύνταξη του np.where στην Python;
Η συνάρτηση np.where() δέχεται έναν πίνακα τύπου NumPy που αποτελείται, για παράδειγμα, από ακέραιους αριθμούς ή τιμές Boolean. Η σύνταξή της έχει την εξής μορφή:
import numpy as np
np.where(condition[, x, y])pythoncondition: Αυτή είναι η συνθήκη που θα εφαρμοστεί στον πίνακα για να καθοριστεί ποια στοιχεία θα επιλεγούν.xκαιy(προαιρετικά): Εάν καθορίσετεxκαιy, οι τιμές απόxθα επιστραφούν όταν πληρούται η συνθήκη. Διαφορετικά, επιστρέφονται οι τιμές απόy. Εάν δεν καθορίσετεxκαιy,np.where()θα επιστρέψει τους δείκτες που πληρούν τη συνθήκη.
Μετά την εκτέλεση, np.where() επιστρέφει έναν νέο πίνακα NumPy. Ο νέος πίνακας είναι το αποτέλεσμα του φιλτραρίσματος ή της επιλογής στοιχείων από τον αρχικό πίνακα με βάση την συνθήκη.
Παραδείγματα χρήσης του np.where
Η μέθοδος np.where() είναι ένα ευέλικτο εργαλείο για την εφαρμογή συνθηκών σε πίνακες και είναι πολύ χρήσιμο για τον χειρισμό δεδομένων. Παρακάτω θα δούμε μερικά παραδείγματα για το πώς να το χρησιμοποιήσετε.
Αντικατάσταση στοιχείων σε πίνακα NumPy
Η συνάρτηση np.where() στο NumPy επιτρέπει την αντικατάσταση στοιχείων σε έναν πίνακα με βάση μια συνθήκη. Πριν ξεκινήσετε, μπορείτε να μετατρέψετε τις λίστες Python σε πίνακες χρησιμοποιώντας np.array().
import numpy as np
arr = np.array([1, 2, 3, 4, 5])pythonΤώρα που έχουμε τον πίνακα μας, θέλουμε να ορίσουμε μια συνθήκη για τον προσδιορισμό των στοιχείων που είναι μεγαλύτερα από 3. Μπορούμε να το κάνουμε αυτό με μια συνθήκη που είναι True για τα στοιχεία που είναι μεγαλύτερα από 3 και false σε κάθε άλλη περίπτωση:
condition = arr > 3pythonΣτη συνέχεια, θα χρησιμοποιήσουμε np.where() και θα εισαγάγουμε αυτήν την συνθήκη. Θα ορίσουμε επίσης ότι οι τιμές που πληρούν την συνθήκη θα αντικατασταθούν με -1 και όλες οι άλλες τιμές θα αντικατασταθούν με 0.
new_arr = np.where(condition, -1, 0)pythonΤο αποτέλεσμα, new_arr, περιέχει τον πίνακα που έχει τροποποιηθεί με βάση την συνθήκη. Στην έξοδο, οι τιμές που είναι μεγαλύτερες από 3 αντικαθίστανται με -1. Όλες οι άλλες τιμές αντικαθίστανται με 0.
print(new_arr)
# Output: [0 0 0 -1 -1]pythonΧρησιμοποιήστε np.where με μία μόνο συνθήκη
Εάν χρησιμοποιήσετε np.where() με μία μόνο συνθήκη και χωρίς τιμές αντικατάστασης, θα επιστρέψει μια τούπλα δεικτών για τους οποίους η συνθήκη είναι αληθής.
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
condition = arr > 2
result = np.where(condition)
print(result)
# Output: (array([2, 3, 4]),)pythonΣε αυτό το παράδειγμα, arr είναι ένας πίνακας NumPy που περιέχει τιμές από 1 έως 5. condition = arr > 2 δημιουργεί μια μάσκα Boolean που προσδιορίζει τα στοιχεία στο arr που είναι μεγαλύτερα από 2. np.where(condition) εκτελείται χωρίς τιμές αντικατάστασης και, ως αποτέλεσμα, επιστρέφει μια τούπλα δεικτών που πληρούν την συνθήκη arr > 2. Το αποτέλεσμα είναι ένας πίνακας δεικτών στον οποίο τα στοιχεία είναι μεγαλύτερα από 2.
Μετάδοση με np.where
Στο NumPy, η μετάδοση καθιστά δυνατή την εκτέλεση λειτουργιών με πίνακες διαφορετικού σχήματος, υπό την προϋπόθεση ότι πληρούνται ορισμένες προϋποθέσεις. Όταν οι πίνακες έχουν διαφορετικά σχήματα, το NumPy θα προσπαθήσει να τους μεγεθύνει ώστε να είναι συμβατοί.
Ας υποθέσουμε ότι έχουμε έναν πίνακα NumPy arr με τη μορφή (3, 3):
import numpy as np
arr = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])pythonΚαι έχουμε έναν άλλο πίνακα NumPy row με τη μορφή (3,):
row = np.array([10, 11, 12])pythonΟι μορφές των δύο πινάκων δεν ταιριάζουν απόλυτα, αλλά η μετάδοση μπορεί να χρησιμοποιηθεί για να επιτρέψει τις λειτουργίες μεταξύ τους. Αν, για παράδειγμα, θέλαμε να προσθέσουμε τις τιμές από κάθε σειρά του arr με τις τιμές του row, η μετάδοση θα το έκανε δυνατό.
result = arr + row
print(result)
# Output: [[11 13 15]
[14 16 18]
[17 19 21]]pythonΣτο παραπάνω παράδειγμα, ο μονοδιάστατος πίνακας row μεγεθύνθηκε σε έναν πίνακα (3, 3) για να ταιριάζει με το σχήμα του arr. Στη συνέχεια, τα στοιχεία του arr και row προστέθηκαν μεταξύ τους στοιχείο προς στοιχείο.