NumPy Broadcasting

Numpy Broadcasting



Πίνακες διαφορετικού μεγέθους δεν μπορούν να προστεθούν, να αφαιρεθούν ή να χρησιμοποιηθούν με άλλο τρόπο στην αριθμητική. Η αντιγραφή του πίνακα των small για να του δοθούν οι ίδιες διαστάσεις και μέγεθος με τον μεγαλύτερο πίνακα είναι μια προσέγγιση. Κατά τη διεξαγωγή αριθμητικής συστοιχίας, το NumPy προσφέρει μια δυνατότητα γνωστή ως μετάδοση συστοιχιών που μπορεί να συντομεύσει και να απλοποιήσει σημαντικά τον κώδικά σας. Θα μάθετε για την ιδέα της μετάδοσης συστοιχιών και πώς να τη χρησιμοποιήσετε στο NumPy σε αυτό το σεμινάριο. Επιπλέον, παρέχονται πολλά παραδείγματα προγραμμάτων.

Τι είναι το NumPy Broadcasting;

Όταν εκτελείτε αριθμητικές πράξεις σε πίνακες διαφορετικών μορφών, το NumPy αναφέρεται σε αυτό ως μετάδοση. Αυτές οι λειτουργίες συστοιχίας εκτελούνται συχνά στα αντίστοιχα στοιχεία. Εάν δύο πίνακες έχουν το ίδιο σχήμα, μπορεί να γίνει πάνω τους με ευκολία. Παρόλο που αυτή η ιδέα είναι χρήσιμη, η μετάδοση δεν συνιστάται πάντα επειδή μπορεί να οδηγήσει σε αναποτελεσματική χρήση μνήμης που επιβραδύνει τον υπολογισμό. Οι λειτουργίες NumPy εκτελούνται συχνά σε ζεύγη πινάκων που αναλύονται στοιχείο προς στοιχείο.

Κανόνες εκπομπής

Πρέπει να ακολουθείτε ένα συγκεκριμένο σύνολο οδηγιών κατά τη μετάδοση. Αυτά περιγράφονται παρακάτω:







  1. Το σχήμα του πίνακα χαμηλότερης κατάταξης είναι σημαντικό να προσαρτάται με 1 έως ότου και τα δύο σχήματα των πινάκων μοιράζονται το ίδιο μήκος εάν δύο πίνακες δεν έχουν την ίδια κατάταξη.
  2. Δύο πίνακες θεωρούνται συμβατοί εάν έχουν το ίδιο μέγεθος διάστασης ή εάν ένας από αυτούς έχει το μέγεθος διάστασης ρυθμισμένο σε 1.
  3. Οι συστοιχίες μπορούν να μεταδοθούν μαζί μόνο εάν τα μεγέθη και οι διαστάσεις τους ταιριάζουν.
  4. Μόλις ολοκληρωθεί η μετάδοση, κάθε πίνακας λειτουργεί σαν να ταιριάζει με τη μορφή του μεγαλύτερου στοιχείου στα σχήματα των δύο συστοιχιών εισόδου.
  5. Ένας από τους πίνακες συμπεριφέρεται σαν να έχει αντιγραφεί με αυτήν τη διάσταση εάν ο άλλος πίνακας έχει διάσταση μεγαλύτερη από 1 και ο πρώτος πίνακας έχει διάσταση 1.

Τώρα, ας συζητήσουμε μερικά παραδείγματα εφαρμογής της έννοιας της εκπομπής.



Παράδειγμα 1:

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



εισαγωγή μουδιασμένος

one_arr = μουδιασμένος. πίνακας ( [ 2.0 , 3.0 , 1.0 ] )

two_arr = μουδιασμένος. πίνακας ( [ 3.0 , 3.0 , 3.0 ] )

Τυπώνω ( one_arr * two_arr )





Όπως μπορείτε να δείτε από τον παραπάνω κώδικα, έχουμε δύο πίνακες: «one_arr» και «two_ arr». Καθένα από τα οποία έχει ξεχωριστό σύνολο τιμών. Οι τιμές στο 'one_arr' είναι [2.0,3.0,1.0] και το 'two _arr' είναι [3.0,3.0,3.0]. Στη συνέχεια, μπορείτε να δείτε ότι το αποτέλεσμα του υπολογισμού του γινομένου αυτών των δύο πινάκων είναι το εξής:



Όταν οι φόρμες των συστοιχιών πληρούν ορισμένες απαιτήσεις, ο κανόνας μετάδοσης του NumPy μειώνει αυτόν τον περιορισμό. Όταν ένας πίνακας και μια βαθμωτή τιμή ενώνονται σε μια πράξη, η μετάδοση εμφανίζεται στην πιο βασική της μορφή. Όπως μπορείτε να δείτε, το 3 περιέχεται στη μεταβλητή με το όνομα 'two_arr.'

εισαγωγή μουδιασμένος

one_arr = μουδιασμένος. πίνακας ( [ 2.0 , 3.0 , 1.0 ] )

two_arr = 3.0

Τυπώνω ( one_arr * two_arr )

Ο παραπάνω κώδικας παράγει το ακόλουθο αποτέλεσμα.

Στο προηγούμενο παράδειγμα, όπου το 'two_arr' ήταν ένας πίνακας, το αποτέλεσμα είναι ισοδύναμο. Μπορούμε να φανταστούμε το βαθμωτό 'two_arr' να επεκτείνεται κατά τη διάρκεια της αριθμητικής διαδικασίας σε έναν πίνακα που έχει το ίδιο σχήμα με το 'one _arr'. Ο πίνακας 'two_arr' περιέχει νέα στοιχεία που είναι απλώς διπλότυπα του πρώτου βαθμωτή. Η σύγκριση είναι απλώς υποθετική. Για να κάνει τις λειτουργίες μετάδοσης ως μνήμη και υπολογιστικά οικονομικές όσο εφικτές, το NumPy είναι αρκετά έξυπνο ώστε να χρησιμοποιεί την αρχική βαθμωτή τιμή αντί να παράγει αντίγραφα.

Παράδειγμα 2:

Εδώ είναι ένα άλλο απλό πρόγραμμα Python που εκτελεί μετάδοση. Για άλλη μια φορά, δημιουργούνται δύο πίνακες που περιέχουν διαφορετικές τιμές. Είναι απαραίτητο να αναδιαμορφώσετε το «first_arr» σε διάνυσμα στήλης με σχήμα 3×1 για να υπολογίσετε ένα εξωτερικό γινόμενο. Μετά από αυτό, η μετάδοση εκτελείται έναντι του 'second_arr' για να παρέχει ένα αποτέλεσμα μεγέθους 3×2, γνωστό ως το εξωτερικό γινόμενο των 'first_arr' και 'second_arr'. Η μετάδοση σε 2×3 είναι δυνατή αφού το 'result_arr' έχει το σχήμα 2 ×3 καθώς και το σχήμα (3,).

Αφού ακολουθήσετε όλα τα προαναφερθέντα βήματα, ένα διάνυσμα πρέπει να συμπεριληφθεί σε κάθε στήλη των πινάκων που είναι «result_arr» και «second_arr». Αυτοί έχουν διαστάσεις 2×3 και (2, ). Η μεταφορά του 'result_arr' θα δώσει ένα σχήμα 3×2, το οποίο στη συνέχεια μπορεί να μεταδοθεί έναντι του 'second_arr' για να πάρει την ίδια μορφή. Τυπικά, η μεταφορά αυτού του αποτελέσματος δίνει ένα τελικό προϊόν σε σχήμα 2×3.

εισαγωγή μουδιασμένος

first_arr = μουδιασμένος. πίνακας ( [ 12 , 24 , 14 ] )

second_arr = μουδιασμένος. πίνακας ( [ δεκαπέντε , 22 ] )

Τυπώνω ( μουδιασμένος. αναπλάσσω ( first_arr , ( 3 , 1 ) ) * second_arr )

result_arr = μουδιασμένος. πίνακας ( [ [ 12 , 22 , 31 ] , [ δεκαπέντε , 22 , Τέσσερα πέντε ] ] )

Τυπώνω ( result_arr + first_arr )

Τυπώνω ( ( result_arr. Τ + second_arr ) . Τ )

Τυπώνω ( result_arr + numpy. αναπλάσσω ( second_arr , ( δύο , 1 ) ) )

Τυπώνω ( result_arr * δύο )

Μπορείτε να δείτε την έξοδο παρακάτω.

Παράδειγμα 3:

Ένας τρισδιάστατος πίνακας μπορεί να μεταδοθεί χρησιμοποιώντας το ακόλουθο πρόγραμμα Python. Σε αυτό το παράδειγμα, έχουν δημιουργηθεί δύο πίνακες με το όνομα 'first_arr' και 'second_arr'. Ο πίνακας 'first_arr' περιέχει [4,13,26,12] τιμές και το 'second_arr' περιέχει [32,67,45,17] τιμές. Οι 2 διαστάσεις του αρχικού πίνακα κάνουν τη διαφορά. Το άθροισμα του πρώτου και του δεύτερου πίνακα θα εμφανιστεί παρακάτω μετά την εκτέλεση του κώδικα. Μπορείτε να δείτε ότι έχουμε τρεις δηλώσεις εκτύπωσης στον κώδικα, καθεμία από τις οποίες εμφανίζει το κείμενο «Πρώτος πίνακας:», «Δεύτερος πίνακας» και «Τρίτος πίνακας:» με τη σειρά. Στη συνέχεια εμφανίζεται το άθροισμα αυτών των δύο πινάκων που δημιουργήθηκαν πρόσφατα.

εισαγωγή μουδιασμένος

first_arr = μουδιασμένος. πίνακας ( [ [ 4 , 13 , 26 , 12 ] , [ 32 , 67 , Τέσσερα πέντε , 17 ] ] )

second_arr = μουδιασμένος. πίνακας ( [ 24 , Τέσσερα πέντε , 66 , 87 ] )

Τυπώνω ( ' \n Πρώτος πίνακας: ' )

Τυπώνω ( first_arr )

Τυπώνω ( ' \n Δεύτερος πίνακας: ' )

Τυπώνω ( second_arr )

Τυπώνω ( ' \n Άθροισμα πρώτου και δεύτερου πίνακα: ' )

sum_result = first_arr + second_arr ;

Τυπώνω ( sum_result )

Εδώ είναι το στιγμιότυπο οθόνης εξόδου του δεδομένου κώδικα.

Παράδειγμα 4:

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

εισαγωγή μουδιασμένος

first_arr = μουδιασμένος. πίνακας ( [ [ 12 , Τέσσερα πέντε , 22 , 13 ] , [ 22 , 54 , 25 , 12 ] , [ πενήντα , 40 , 18 , 26 ] ] )

second_arr = μουδιασμένος. πίνακας ( [ 12 , 44 , 22 , 12 ] )

Τυπώνω ( ' \n Πρώτος πίνακας: ' )

Τυπώνω ( first_arr )

Τυπώνω ( ' \n Δεύτερος πίνακας: ' )

Τυπώνω ( second_arr )

Τυπώνω ( ' \n Άθροισμα πρώτου και δεύτερου πίνακα: ' )

sum_result = first_arr + second_arr ;

Τυπώνω ( sum_result )

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

συμπέρασμα

Αυτό το άρθρο εξέτασε τη μετάδοση, μια κρίσιμη έννοια της Python. Στο NumPy, ο όρος «εκπομπή» αναφέρεται στην ικανότητα χειρισμού συστοιχιών διαφόρων σχημάτων κατά την εκτέλεση αριθμητικών πράξεων που εκτελούνται συχνά. Το προαναφερθέν θέμα έχει καλυφθεί διεξοδικά με ποικίλα παραδείγματα. Αυτό το άρθρο χρησιμοποίησε τα αναφερόμενα παραδείγματα προγραμμάτων για να δείξει πώς να εκπέμπετε σε συστοιχίες 1-D, 2-D και 3-D, αντίστοιχα. Μπορείτε να δοκιμάσετε να εκτελέσετε αυτά τα παραδείγματα στο σύστημά σας και να προβάλετε τα αποτελέσματα για να κατανοήσετε καλύτερα πώς λειτουργούν τα πάντα γενικά.