Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 1906|Απάντηση: 1

[Συμβουλές] [Μετάφραση]. Λειτουργία τεμαχισμού πίνακα NumSharp σε NET/C#

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 2025-1-10 12:17:13 | | | |

Χάρη στις εξαιρετικές νέες δυνατότητες τεμαχισμού συστοιχιών του NumSharp, η κοινότητα .NET είναι ένα βήμα πιο κοντά στο να έχει μια ισχυρή πλατφόρμα μηχανικής εκμάθησης ανοιχτού κώδικα.

Η Python είναι μια γλώσσα μηχανικής εκμάθησης εν μέρει επειδή έχει εξαιρετικές βιβλιοθήκες όπως η NumPy και η TensorFlow. Ωστόσο, οι προγραμματιστές C# έχουν επίσης μεγάλη ανάγκη για ισχυρές βιβλιοθήκες ανοιχτού κώδικα για μηχανική μάθηση και επιστήμη δεδομένων. Το NumSharp, η θύρα NumPy C# του οργανισμού SciSharp STACK, έκανε πρόσφατα ένα μεγάλο βήμα προς τα εμπρός εφαρμόζοντας πλήρως τις δυνατότητες τεμαχισμού, επιτρέποντας τη δημιουργία αυθαίρετων υποσυνόλων πινάκων Ν-διαστάσεων ως αποτελεσματικές προβολές ακατέργαστων δεδομένων. Αυτό το καθιστά χρήσιμο εργαλείο για τη χρήση C# για μηχανική εκμάθηση σε συνδυασμό με TensorFlow.NET.


Ποια είναι η μεγάλη υπόθεση;

Εάν δεν έχετε χρησιμοποιήσει το NumPy, πιθανότατα δεν ξέρετε πόσο υπέροχος είναι ο τεμαχισμός. Python Οι πίνακες επιτρέπουν την επιστροφή ενός τμήματος ενός πίνακα με ευρετηρίαση μιας σειράς στοιχείων, ως εξής: a[start:stop:step]. Αλλά μόνο με την πολύπλοκη εφαρμογή συστοιχιών του NumPy ο τεμαχισμός γίνεται μια πραγματικά ισχυρή τεχνική χειρισμού δεδομένων χωρίς την οποία η μηχανική μάθηση ή η επιστήμη δεδομένων θα ήταν αδιανόητη.

Ευτυχώς, για όσους δεν μπορούν ή δεν θέλουν να μεταβούν στην Python για μηχανική μάθηση (την οποία έφτιαξα και εγώ), το NumSharp φέρνει αυτή τη δυνατότητα στον κόσμο του .NET. Ως ένας από τους προγραμματιστές στο NumSharp, σας παρουσίασα μερικές σημαντικές περιπτώσεις χρήσης τεμαχισμού με δείγματα αποσπασμάτων κώδικα σε C#. Σημειώστε ότι η ευρετηρίαση δεν μπορεί να γίνει στη C# με τον ίδιο τρόπο όπως στην Python λόγω διαφορών στη σύνταξη της γλώσσας. Ωστόσο, αποφασίσαμε να διατηρήσουμε τη σύνταξη της Python για τους ορισμούς των τμημάτων, οπότε χρησιμοποιήσαμε συμβολοσειρές για την ευρετηρίαση των τμημάτων στη C#. Δείτε αυτό το παράδειγμα για να δείτε πόσο κοντά είναι το NumSharp στο NumPy.




Αποκόψτε τη στήλη από τη μήτρα στο Python/NumPy

Όταν γράφεται σε C# με NumSharp, ο κώδικας είναι σχεδόν πανομοιότυπος. Σημειώστε ότι τα slice ευρετηριάζονται ελαφρώς διαφορετικά χρησιμοποιώντας συμβολοσειρές ως παραμέτρους για το ευρετήριο.




Αποκοπή στηλών από έναν πίνακα σε C#/NumSharp

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


Περίπτωση χρήσης: Χρήση πολλαπλών αναλυτικών προβολών των ίδιων δεδομένων



Η δυνατότητα μετάδοσης μόνο τοπικών τμημάτων των υποκείμενων δεδομένων (δηλαδή, μικρά κομμάτια μεγάλων εικόνων) μέσα και έξω από συναρτήσεις χωρίς αντιγραφή είναι κρίσιμη για την απόδοση του χρόνου εκτέλεσης, ειδικά για μεγάλα σύνολα δεδομένων. Τα slice ευρετηριάζονται χρησιμοποιώντας τοπικές συντεταγμένες, επομένως ο αλγόριθμός σας δεν χρειάζεται να γνωρίζει την παγκόσμια δομή των δεδομένων σας, απλοποιώντας αποτελεσματικά τη ζωή σας και διασφαλίζοντας τη μέγιστη απόδοση, επειδή αποφεύγεται η περιττή επανάληψη.


Περιπτώσεις χρήσης: Αραιές προβολές και αναδρομικός τεμαχισμός



Μια αραιή προβολή ενός πίνακα μπορεί να δημιουργηθεί καθορίζοντας βήματα πέρα από την αρχή και το τέλος του εύρους slice. Από όσο γνωρίζω, ακόμη και η C# 8.0 με τη νέα σύνταξη slice array δεν μπορεί να το κάνει αυτό. Αυτή η δυνατότητα γίνεται πολύ σημαντική όταν ασχολείστε με παρεμβαλλόμενα δεδομένα. Μπορείτε να σχεδιάσετε τον αλγόριθμό σας ώστε να χειρίζεται συνεχή δεδομένα και να του παρέχετε αραιές φέτες που μιμούνται συνεχείς πηγές δεδομένων, ελαχιστοποιώντας την πολυπλοκότητα του αλγορίθμου σας.


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


Περίπτωση χρήσης: Αποτελεσματική επεξεργασία δεδομένων υψηλών διαστάσεων



Εάν πρέπει να σκεφτείτε έναν πίνακα δεδομένων ως έναν τόμο και να εργαστείτε με τα μέρη του χωρίς να χρειάζεται να κάνετε απίστευτους υπολογισμούς μετασχηματισμού συντεταγμένων, τότε η .reshape() είναι ο φίλος σας.
Όλοι οι πίνακες που δημιουργούνται από ή λειτουργίες τεμαχισμού είναι .reshape() απλώς μια προβολή των αρχικών δεδομένων. Όταν επαναλαμβάνετε, διαβάζετε ή γράφετε στοιχεία σε μια προβολή, αποκτάτε πρόσβαση στον πίνακα ανεπεξέργαστων δεδομένων. Το NumSharp εκτελεί με διαφάνεια τους κατάλληλους μετασχηματισμούς ευρετηρίου για εσάς, ώστε να μπορείτε να δημιουργήσετε ευρετήριο φετών με σχετικές συντεταγμένες.


Περίπτωση χρήσης: Αντιστρέψτε τη σειρά των στοιχείων χωρίς επιπλέον κόστος

Τα slice που χρησιμοποιούν αρνητικά βήματα στην πραγματικότητα αντιστρέφουν τη σειρά των slice. Το πλεονέκτημά του είναι ότι δεν χρειάζεται να αντιγράψει ή να απαριθμήσει δεδομένα για να το κάνει αυτό, όπως ακριβώς το IEnumerable.Reverse(). Η διαφορά είναι ότι η προβολή (το αποτέλεσμα της πράξης a["::-1"]) εμφανίζει τα δεδομένα με αντίστροφη σειρά και μπορείτε να δημιουργήσετε ευρετήριο σε αυτήν την ανεστραμμένη ακολουθία χωρίς να την απαριθμήσετε.


Περίπτωση χρήσης: Μειώστε την πολυπλοκότητα μειώνοντας τις διαστάσεις

Όταν εργάζεστε με δεδομένα υψηλών διαστάσεων, οι αλγόριθμοι για αυτά τα δεδομένα μπορεί επίσης να γίνουν πολύ περίπλοκοι. Κατά τη χρήση, μπορεί να εξαχθεί οποιοσδήποτε όγκος υψηλών διαστάσεων. Όταν η μέθοδος NumSharp NDArray του ToString(), παρατήρησα πόσο απλός και όμορφος έχει γίνει ο αλγόριθμος κόβοντας συστηματικά και αναδρομικά τόμους ND σε τόμους (N-1)D κ.λπ.

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

Σύμβολο εύρους έναντι συμβόλου ευρετηρίου

Το σύμβολο εύρους ["start:stop:step"] σας επιτρέπει να έχετε πρόσβαση σε μια υποπεριοχή ενός δεδομένου τόμου με την ίδια διάσταση. Έτσι, ακόμα κι αν κόψετε μόνο μία στήλη του 2D πίνακα, θα εξακολουθείτε να έχετε έναν 2D πίνακα με μία μόνο στήλη. Ακολουθεί ένα σύντομο κομμάτι κώδικα C# που το δείχνει αυτό:



Τομή της στήλης χρησιμοποιώντας το σύμβολο περιοχής

Το σύμβολο ευρετηρίου σας δίνει μια διαστατική φέτα (N-1) στην καθορισμένη θέση του Ν-διάστατου γονικού όγκου. Έτσι, η αποκοπή μιας στήλης από έναν πίνακα 2D χρησιμοποιώντας σύμβολα ευρετηρίου σας δίνει ένα διάνυσμα 1D:


Slice στηλών με χρήση συμβόλων ευρετηρίου

Αν δεν έχετε δει τη διαφορά με μια ματιά, εδώ είναι οι δύο παραπάνω ορισμοί slice δίπλα-δίπλα, ange[":,2:3"] vs index[":,2"], που έχουν μεγάλο αντίκτυπο στα αποτελέσματα. Μια πλήρης αναφορά στο σύμβολο της νέας φέτας μπορεί να βρεθεί στο wiki του NumSharp.


Σημείωση: <T>ArraySlice

Κατά την εφαρμογή του τεμαχισμού των προβολών Ν-διαστάσεων, κατέληξα στο συμπέρασμα ότι μπορεί να είναι ενδιαφέρον για πολλούς άλλους τομείς στο .NET, οπότε το ανέλυσα στη δική μου αυτόνομη βιβλιοθήκη που ονομάζεται SliceAndDice. Διαθέτει ένα ελαφρύ περιτύλιγμα για την ευρετηρίαση οποιασδήποτε δομής δεδομένων C# (όπως ή) ArraySlice <T>και σας επιτρέπει να χρησιμοποιείτε τους ίδιους μηχανισμούς αναδιαμόρφωσης, τεμαχισμού και προβολής χωρίς όλους τους άλλους βαρείς αριθμητικούς υπολογισμούς. Χρειάζονται μόνο μερικές εκατοντάδες γραμμές κώδικα για να επιτευχθούν εξαιρετικές δυνατότητες κοπής! Τ[]IList<T>


Περιτύλιγμα

Το NumSharp έλαβε πρόσφατα τον ίδιο μηχανισμό τεμαχισμού και προβολής, γεγονός που αναμφίβολα καθιστά το NumPy μία από τις πιο σημαντικές βιβλιοθήκες στο οικοσύστημα μηχανικής μάθησης Python. Το SciSharp STACK είναι ένας οργανισμός ανοιχτού κώδικα ενός μικρού αριθμού εξειδικευμένων προγραμματιστών που έχουν εργαστεί πολύ σκληρά για να φέρουν την ίδια λειτουργικότητα στον κόσμο του .NET. Οι τελευταίες βελτιώσεις του NumSharp αποτελούν σημαντικό ακρογωνιαίο λίθο για την επίτευξη αυτού του στόχου.


Αρχικός:Η σύνδεση με υπερσύνδεσμο είναι ορατή.




Προηγούμενος:Στοιχείο ελέγχου εκδόσεων μεγάλου αρχείου Git lfs
Επόμενος:Rocky Linux 9 wake on lan
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 2025-1-10 12:18:43 |
Το NumSharp είναι κατάλληλο για διάφορα σενάρια, όπως εκπαιδευτική έρευνα, οικονομική ανάλυση, επεξεργασία εικόνας, βαθιά μάθηση και πολλά άλλα.

Το NumSharp, ως μέρος του SciSharp.org, έχει ενσωματωθεί σε ένα ευρύ φάσμα NET Επιστημονικό Υπολογιστικό Οικοσύστημα. Ακολουθούν ορισμένα σχετικά και εξαιρετικά συμπληρωματικά στοιχεία που προτείνονται να εξερευνήσετε περαιτέρω:

ML.NET: Microsoft推出的开源机器学习框架, 用于训练和部署自定义的机器学习模型。
SciSharp.TensorFlow.Redist: 为.NET环境提供了TensorFlow的封装, 使开发者能够在.NET应用程序中使用TensorFlow执行深度学习任务。
MathNet.Numerics: 提供了一系列数学方法和统计计算工具, 与NumSharp相辅相成。

Συμπερασματικά, το NumSharp δεν είναι απλώς μια αυτόνομη ισχυρή βιβλιοθήκη, αλλά μια σύνδεση. Ένας βασικός κόμβος στην επιστημονική υπολογιστική κοινότητα .NET.

Διεύθυνση έργου NumSharp:https://github.com/SciSharp/NumSharp
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com