Εδώ λειτουργεί το "np.tensordot` και πώς να το χρησιμοποιήσετε αποτελεσματικά:
Κατανόηση της παραμέτρου των αξόνων:
Ο πυρήνας του `np.tensordot 'βρίσκεται στην παράμετρο των αξόνων. Αυτή η παράμετρος καθορίζει ποιοι άξονες των συστοιχιών εισόδου (`a` και` b`) πρέπει να αθροίζονται κατά τη διάρκεια του προϊόντος dot. Μπορεί να είναι:
* Ακέραιος: Αυτό καθορίζει τον αριθμό των άξονων σε άθροισμα από το * άκρο * κάθε πίνακα. Αν «άξονες =1», αθροίζεται στον τελευταίο άξονα του «Α» και στον τελευταίο άξονα του «Β». Εάν «άξονες =2», αθροίζεται στους τελευταίους δύο άξονες του καθενός και ούτω καθεξής. Αυτή είναι η απλούστερη μορφή.
* Μια πλειάδα δύο ακολουθιών: Αυτό παρέχει τον μεγαλύτερο έλεγχο. Κάθε ακολουθία καθορίζει τους άξονες των «a» και «b» αντίστοιχα, που πρέπει να συμβληθούν (αθροίζονται). Τα μήκη των ακολουθιών πρέπει να είναι ίσα.
Παραδείγματα:
1.
`` `Python
Εισαγωγή Numpy ως NP
a =np.array ([[1, 2], [3, 4]])
b =np.array ([[5, 6], [7, 8]])
c =np.tensordot (a, b, άξονες =1) # ισοδύναμο με np.dot (a, b)
Εκτύπωση (C) # έξοδος:[[19 22] [43 50]]
c =np.tensordot (a, b, άξονες =((1), (0))) #Same όπως παραπάνω
Εκτύπωση (C) # έξοδος:[[19 22] [43 50]]
`` `
2.
`` `Python
a =np.arange (24) .Reshape ((2,3,4))
b =np.arange (24) .Reshape ((4,3,2))
c =np.tensordot (a, b, άξονες =([2], [0])))
εκτύπωση (C.Shape) # έξοδος:(2, 3, 3, 2)
#Πιο σύνθετη συστολή:
c =np.tensordot (a, b, άξονες =([(0,2)], [(1,0)])))))
εκτύπωση (C.Shape) #output:(3, 2)
`` `
3.
Το "NP.Tensordot" εκτελεί αποτελεσματικά λειτουργίες παρόμοιες με τις σημειώσεις αθροίσεως του Αϊνστάιν. Για παράδειγμα, εάν το `a` είναι (i, j, k) και` b` είναι (k, l), τότε η συστολή πάνω από το `k` μπορεί να γραφτεί ως:
`C_ {ijl} =\ sum_k a_ {ijk} b_ {kl}`
Αυτό μπορεί να επιτευχθεί αποτελεσματικά με:
`` `Python
a =np.random.rand (2,3,4)
b =np.random.rand (4,5)
c =np.tensordot (a, b, άξονες =([2], [0])))
εκτύπωση (C.Shape) # έξοδος:(2, 3, 5)
`` `
Σκέψεις αποδοτικότητας:
* σειρά αξόνων: Η σειρά με την οποία καθορίζετε τους άξονες μπορεί να επηρεάσει την απόδοση. Οι εσωτερικές βελτιστοποιήσεις του Numpy μπορεί να είναι πιο αποτελεσματικές με ορισμένες παραγγελίες. Πείραμα για να βρείτε την ταχύτερη διαμόρφωση για τους συγκεκριμένους τανυστήρες σας.
* Χρήση μνήμης: Για εξαιρετικά μεγάλους τανυστήρες, το `np.tensordot` μπορεί να οδηγήσει σε προβλήματα μνήμης. Σε τέτοιες περιπτώσεις, εξετάστε το ενδεχόμενο να χρησιμοποιήσετε επαναληπτικές μεθόδους ή βιβλιοθήκες σχεδιασμένες για λειτουργίες μεγάλης κλίμακας τανυστή (όπως TensorFlow ή Pytorch), οι οποίες συχνά έχουν καλύτερες στρατηγικές διαχείρισης μνήμης.
* Εναλλακτική λύση για απλές περιπτώσεις: Για απλά προϊόντα dot ή πολλαπλασιασμούς μήτρας, το `np.dot` ή`@`operator είναι συνήθως ταχύτερος από το` np.tensordot '.
Συνοπτικά, το `np.tensordot` είναι ένα ισχυρό εργαλείο, αλλά η κατανόηση της παράμετρος` axes` είναι ζωτικής σημασίας για την αποτελεσματική και σωστή χρήση. Επιλέξτε τη σωστή μέθοδο βάσει της πολυπλοκότητας των λειτουργιών σας Tensor και του μεγέθους των δεδομένων σας για να βελτιστοποιήσετε τόσο την ταχύτητα όσο και τη χρήση της μνήμης.
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα