Ο πολλαπλασιασμός πίνακα είναι μια θεμελιώδης πράξη στη γραμμική άλγεβρα.
Γενικά το χρησιμοποιούμε σε πολλές εφαρμογές όπως η επεξεργασία εικόνας, η μηχανική εκμάθηση και πολλές άλλες. Το NumPy είναι ένα αξιόλογο πακέτο Python για επιστημονικούς υπολογιστές.
Ωστόσο, σε αυτήν την ανάρτηση, θα εξετάσουμε διάφορες μεθόδους για τον πολλαπλασιασμό μήτρας στην Python χωρίς τη χρήση του NumPy.
θα αξιοποιήσουμε ένθετοι βρόχοι, την ενσωματωμένη συνάρτηση map() και την κατανόηση λίστας.
Επιπλέον, θα εξετάσουμε τα πλεονεκτήματα και τα μειονεκτήματα κάθε στρατηγικής, καθώς και πότε πρέπει να εφαρμόσουμε καθεμία από αυτές. Εάν είστε νέος στη γραμμική άλγεβρα και θέλετε να μάθετε περισσότερα σχετικά με τον πολλαπλασιασμό πινάκων. συνέχισε να διαβάζεις.
Πού χρησιμοποιούμε τον πολλαπλασιασμό μήτρας;
Ο πολλαπλασιασμός πίνακα χρησιμοποιείται σε γραφικά υπολογιστή για να αλλάξετε 2D και 3D γραφικά. Για παράδειγμα, μπορείτε να περιστρέψετε, να κλιμακώσετε και να μεταφράσετε αντικείμενα στην οθόνη. Οι μήτρες χρησιμοποιούνται στην επεξεργασία εικόνας για να αναπαραστήσουν τις εικόνες ως συστοιχίες pixel. Επιπλέον, οι μήτρες μπορούν να χρησιμοποιηθούν για τη διεξαγωγή λειτουργιών όπως το φιλτράρισμα εικόνας.
Χρησιμοποιούμε επίσης μήτρες στο μάθηση μηχανής. Μπορούν να μας βοηθήσουν να αναπαραστήσουμε δεδομένα και παραμέτρους μοντέλου. Μπορούμε να πραγματοποιήσουμε πολυάριθμες λειτουργίες, όπως υπολογισμούς προϊόντων κουκκίδων και προϊόντων μήτρας-διανύσματος.
Σίγουρα, αυτή η λειτουργία είναι επίσης εξαιρετικά συμφέρουσα σε επιστημονικές εργασίες. Μπορούμε να το χρησιμοποιήσουμε στη φυσική και τη μηχανική για να περιγράψουμε φυσικά μεγέθη. Ως εκ τούτου, μπορούμε να λειτουργήσουμε με διανύσματα και τανυστές.
Γιατί δεν μπορούμε να επιλέξουμε να χρησιμοποιήσουμε το NumPy;
Ενώ το NumPy είναι α Βιβλιοθήκη Python, δεν είναι πάντα η ιδανική επιλογή για πολλαπλασιασμό πίνακα. Ενδέχεται να μην επιλέξουμε να χρησιμοποιήσουμε το NumPy για λόγους όπως το μέγεθος και η εξάρτηση, η εκμάθηση και τα συστήματα παλαιού τύπου.
Η χρήση των ενσωματωμένων συναρτήσεων της Python ή η ανάπτυξη προσαρμοσμένου κώδικα μπορεί να είναι πιο αποτελεσματική σε ορισμένες περιπτώσεις. Είναι σημαντικό να σημειωθεί, ωστόσο, ότι η NumPy είναι μια ισχυρή βιβλιοθήκη. Επιπλέον, μπορείτε επίσης να το χρησιμοποιήσετε για πολλαπλασιασμό πίνακα.
Τώρα, ας ρίξουμε μια ματιά στο πώς μπορούμε να επιτύχουμε πολλαπλασιασμό πίνακα χωρίς NumPy.
Μέθοδος ένθετων βρόχων
Η τεχνική των ένθετων βρόχων χρησιμοποιεί ένθετους βρόχους για την εκτέλεση πολλαπλασιασμού μήτρας στην Python. Η συνάρτηση επαναλαμβάνεται πάνω από κάθε στοιχείο μήτρας. Και, τους πολλαπλασιάζει χρησιμοποιώντας μια σειρά από ένθετους βρόχους. Η συνάρτηση επιστρέφει το αποτέλεσμα, το οποίο αποθηκεύεται σε νέο πίνακα.
Αυτή η προσέγγιση είναι εύκολη στην κατανόηση. Ωστόσο, μπορεί να μην είναι τόσο αποτελεσματικό όσο άλλοι τρόποι, ιδιαίτερα για μεγαλύτερους πίνακες. Ωστόσο, είναι μια θαυμάσια επιλογή για εσάς εάν είστε νέοι στη γραμμική άλγεβρα.
def matrix_multiplication(A, B):
# Determine the matrices' dimensions.
rows_A = len(A)
cols_A = len(A[0])
rows_B = len(B)
cols_B = len(B[0])
# Ορίστε τον πίνακα αποτελεσμάτων σε μηδέν.
result = [[0 for row in range(cols_B)] for col in
range(rows_A)]
# Iterate through rows of A
for s in range(rows_A):
# Iterate through columns of B
for j in range(cols_B):
# Iterate through rows of B
for k in range(cols_A):
result[s][j] += A[s][k] * B[k][j]
return result
Ας έχουμε ένα παράδειγμα για το πώς να το κάνουμε αυτό. Μπορείτε απλώς να προσθέσετε αυτές τις γραμμές κώδικα παρακάτω για να δοκιμάσετε αυτό το παράδειγμα.
# Sample matrices
A = [[1, 4, 3], [4, 9, 6]]
B = [[7, 8], [9, 10], [11, 12]]
# Perform matrix multiplication
result = matrix_multiplication(A, B)
# Print the result
print(result)
# Output: [[76, 84], [175, 194]]
οφέλη:
- Εύκολο στην κατανόηση.
- Ιδανικό για αρχάριους ή όσους αναζητούν μια βαθύτερη κατανόηση του πολλαπλασιασμού μήτρας.
μειονεκτήματα:
- Δεν είναι τόσο αποτελεσματικές όσο οι εναλλακτικές τεχνικές, ιδιαίτερα για μεγαλύτερες μήτρες.
- Δεν είναι τόσο ευανάγνωστο όσο οι εναλλακτικές προσεγγίσεις.
μέθοδος συνάρτησης map().
Η μέθοδος της συνάρτησης map() παρέχει μια εναλλακτική προσέγγιση για τον πολλαπλασιασμό μήτρας στην Python. Σε αυτήν την προσέγγιση, χρησιμοποιούμε την ενσωματωμένη συνάρτηση map(). Ως εκ τούτου, χρησιμοποιούμε ένα εργαλείο λειτουργικού προγραμματισμού που εφαρμόζει μια παρεχόμενη συνάρτηση σε κάθε επαναλαμβανόμενο στοιχείο (λίστα, πλειάδα, κ.λπ.). Επίσης, η συνάρτηση map() δέχεται δύο παραμέτρους, μια συνάρτηση και έναν επαναληπτικό. Και, επιστρέφει έναν επαναλήπτη που εφαρμόζει τη συνάρτηση σε κάθε επαναλαμβανόμενο στοιχείο.
Σε αυτήν την προσέγγιση, περνάμε από κάθε μέλος του πίνακα και κάνουμε τον πολλαπλασιασμό χρησιμοποιώντας τη συνάρτηση ένθετη map().
Η συνάρτηση zip() χρησιμοποιείται για την παράλληλη επανάληψη κάθε στοιχείου των πινάκων.
Τέλος, η συνάρτηση sum() χρησιμοποιείται για την πρόσθεση των αποτελεσμάτων.
def matrix_multiplication(A, B):
# To get the dimensions of the matrices
rows_A = len(A)
cols_A = len(A[0])
rows_B = len(B)
cols_B = len(B[0])
# We use map() function for multiplication.
result = [[sum(a * b for a, b in zip(row_a, col_b)) for
col_b in zip(*B)] for row_a in A]
return result
Τώρα, πάλι, μπορούμε να δοκιμάσουμε τον κώδικά μας με ένα παράδειγμα.
# Example matrices
A = [[3, 2, 3], [4, 5, 6]]
B = [[7, 8], [9, 10], [11, 12]]
# Use map() function to perform matrix multiplication
result = list(map(lambda x: list(map(lambda y: sum(i*j
for i,j in zip(x,y)), zip(*B))), A))
# Print the result
print(result)
# Output: [[72, 80], [139, 154]]
Πλεονεκτήματα
- Πιο αποτελεσματική από την προσέγγιση των στοιβαγμένων βρόχων
- Χρησιμοποιεί λειτουργικό προγραμματισμό για να κάνει τον κώδικα πιο απλό.
Μειονεκτήματα
- Μερικοί άνθρωποι που δεν είναι εξοικειωμένοι με τον λειτουργικό προγραμματισμό μπορεί να τον βρουν λιγότερο ευανάγνωστο.
- Είναι λιγότερο κατανοητό από την τεχνική των ένθετων βρόχων.
Μέθοδος κατανόησης λίστας
Η κατανόηση λίστας σάς δίνει τη δυνατότητα να δημιουργήσετε μια νέα λίστα σε μία γραμμή κώδικα. Επομένως, αυτό γίνεται με την εφαρμογή μιας έκφρασης σε κάθε μέλος μιας υπάρχουσας λίστας.
Σε αυτή την προσέγγιση, ο πολλαπλασιασμός πραγματοποιείται με επανειλημμένη επανάληψη μέσω κάθε μέλους μήτρας. Χρησιμοποιούμε την κατανόηση της πολυεπίπεδης λίστας.
# Sample matrices
A = [[1, 12, 3], [14, 5, 6]]
B = [[7, 8], [9, 10], [12, 12]]
# Matrix multiplication using list comprehension
result = [[sum(A[i][k] * B[k][j] for k in range(len(A[0])))
for j in range(len(B[0]))] for i in range(len(A))]
# Print the result
print(result)
[[151, 164], [215, 234]]
Oφέλη
- Σε σύγκριση με τη μέθοδο της συνάρτησης map(), είναι πιο σύντομη και πιο ευανάγνωστη.
Μειονεκτήματα
- Μπορεί να είναι λιγότερο αποτελεσματικό από τη χρήση της συνάρτησης map(), ιδιαίτερα για μεγάλους πίνακες.
- Είναι πιο δύσκολο από την προσέγγιση των ένθετων βρόχων.
Συμπέρασμα
Σε αυτήν την ανάρτηση, εξετάσαμε εναλλακτικές λύσεις για τη χρήση του NumPy κατά τον πολλαπλασιασμό πινάκων στην Python. Πραγματοποιήσαμε πολλαπλασιασμό πίνακα σε ένθετους βρόχους, την ενσωματωμένη συνάρτηση map() και κατανόηση λίστας.
Η καλύτερη στρατηγική θα βασίζεται στις ιδιαίτερες ανάγκες του έργου σας.
Κάθε μία από τις στρατηγικές έχει τα δικά της πλεονεκτήματα και μειονεκτήματα. Για να βεβαιωθείτε ότι η συνάρτηση λειτουργεί σωστά, είναι καλή ιδέα να προσθέσετε μερικές περιπτώσεις δοκιμής με διάφορες διαστάσεις και τιμές μήτρας.
Θα πρέπει επίσης να συμπεριλάβετε ορισμένες δοκιμές απόδοσης για να συγκρίνετε πόσο καλά εκτελούνται αυτές οι μέθοδοι.
Αφήστε μια απάντηση