Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 1906|Répondre: 1

[Pourboires] [traduction]. Fonction de découpe de tableaux NumSharp en NET/C#

[Copié le lien]
Publié le 10-01-2025 à 12:17:13 | | | |

Grâce aux excellentes nouvelles capacités de découpage de tableaux de NumSharp, la communauté .NET est un pas plus rapprochée d’une plateforme puissante d’apprentissage automatique open source.

Python est un langage d’apprentissage automatique en partie parce qu’il possède d’excellentes bibliothèques comme NumPy et TensorFlow. Cependant, les développeurs C# ont aussi un grand besoin de bibliothèques open source puissantes pour l’apprentissage automatique et la data science. NumSharp, le portage NumPy C# de l’organisation SciSharp STACK, a récemment franchi un grand pas en avant en implémentant pleinement des capacités de découpage, permettant la création de sous-ensembles arbitraires de tableaux N-dimensionnels comme vues efficaces des données brutes. Cela en fait un outil utile pour utiliser C# en apprentissage automatique en conjonction avec TensorFlow.NET.


Quel est le problème ?

Si vous n’avez pas utilisé NumPy, vous ne savez probablement pas à quel point le slicing est génial. Les tableaux Python permettent de retourner une tranche d’un tableau en indexant une série d’éléments, comme suit : a[start :stop :step]. Mais ce n’est qu’avec l’implémentation complexe de NumPy que le découpage devient une technique de manipulation de données vraiment puissante, sans laquelle l’apprentissage automatique ou la data science seraient inimaginables.

Heureusement, pour ceux qui ne peuvent pas ou ne veulent pas passer à Python pour l’apprentissage automatique (que j’ai aussi fait), NumSharp apporte cette fonctionnalité dans le monde .NET. En tant que développeur chez NumSharp, je vous ai présenté quelques cas d’utilisation importants du découpage avec des extraits de code exemples en C#. Notez que l’indexation ne peut pas être effectuée en C# de la même manière qu’en Python en raison des différences de syntaxe du langage. Cependant, nous avons décidé de conserver la syntaxe Python pour les définitions de tranches, alors nous avons utilisé des chaînes pour indexer les tranches en C#. Regarde cet exemple pour voir à quel point NumSharp est proche de NumPy.




Découpez la colonne de la matrice en Python/NumPy

Lorsqu’il est écrit en C# avec NumSharp, le code est presque identique. Notez que les tranches sont indexées légèrement différemment en utilisant des chaînes comme paramètres pour l’indexeur.




Découpez des colonnes d’une matrice en C#/NumSharp

Comme vous pouvez le voir, l’équipe NumSharp a mis beaucoup d’efforts pour rendre le code aussi similaire que possible à Python. C’est très important car de cette façon, le code Python existant qui dépend de NumPy peut désormais être facilement porté en C#.


Cas d’utilisation : Utiliser plusieurs vues des mêmes données



Pouvoir ne faire passer que des parties locales des données sous-jacentes (c’est-à-dire de petits morceaux de grandes images) dans et hors des fonctions sans copier est essentiel pour les performances à l’exécution, en particulier pour les grands ensembles de données. Les tranches sont indexées à l’aide de coordonnées locales, donc votre algorithme n’a pas besoin de connaître la structure globale de vos données, ce qui simplifie ainsi votre vie et garantit des performances maximales car la duplication inutile est évitée.


Cas d’utilisation : vues clairsemées et découpage récursif



Une vue clairsemée d’un tableau peut être créée en spécifiant les étapes au-delà du début et de la fin de la plage de tranches. À ma connaissance, même C# 8.0 avec la nouvelle syntaxe de la tranche de tableau ne peut pas faire cela. Cette fonctionnalité devient très importante lorsqu’on traite des données entrelacées. Vous pouvez concevoir votre algorithme pour gérer des données continues et lui fournir des tranches clairsemées qui imitent des sources de données continues, minimisant ainsi la complexité de votre algorithme.


Le tranchant peut être découpé davantage, ce qui est une fonctionnalité très importante si vous travaillez avec des données de haute dimension. Cela aide aussi à réduire la complexité de l’algorithme, car vous pouvez diminuer la dimensionnalité des données en découpant récursivement.


Cas d’utilisation : Traiter efficacement des données de haute dimension



Si vous devez considérer un tableau de données comme un volume et travailler avec ses parties sans avoir à faire d’incroyables calculs de transformation de coordonnées, alors .reshape() est votre allié.
Tous les tableaux créés par ou par des opérations de découpage sont .reshape() simplement une vue des données originales. Lorsque vous itérerez, lisez ou écrivez des éléments dans une vue, vous accédez au tableau de données brut. NumSharp effectue de manière transparente les transformations d’index appropriées pour vous, vous permettant ainsi d’indexer des tranches avec des coordonnées relatives.


Cas d’utilisation : inverser l’ordre des éléments sans coût supplémentaire

Les tranches utilisant des pas négatifs inversent en réalité l’ordre des tranches. L’avantage est qu’il n’a pas besoin de copier ou d’énumérer des données pour cela, tout comme IEnumerable.Reverse(). La différence est que la vue (le résultat de l’opération a[ » ::-1"]) affiche les données dans l’ordre inverse, et vous pouvez indexer cette séquence inversée sans l’énumérer.


Cas d’usage : Réduire la complexité en réduisant les dimensions

Lorsqu’on travaille avec des données de haute dimension, les algorithmes pour ces données peuvent également devenir très complexes. En usage, tout volume de haute dimension peut être sorti. Avec la méthode NumSharp de ToString() NDArray, j’ai remarqué à quel point l’algorithme est devenu simple et beau en découpant systématiquement et récursivement les volumes ND en volumes (N-1)D, etc.

Cette approche divise-va-re retourne les sous-volumes de faible dimension en tranchant les symboles de plage à l’aide des symboles d’index de NumSharp.

Symbole de plage vs. symbole d’index

Le symbole de plage [« start :stop :step »] permet d’accéder à une sous-plage d’un volume donné ayant la même dimension. Donc, même si vous ne coupez qu’une seule colonne de la matrice 2D, vous obtiendrez quand même une matrice 2D avec une seule colonne. Voici un court morceau de code C# qui le démontre :



Découpez la colonne en utilisant le symbole de plage

Le symbole d’index vous donne une tranche de dimension (N-1) à l’emplacement spécifié du volume parent de dimension N. Ainsi, découper une colonne d’une matrice 2D à l’aide de symboles d’index vous donne un vecteur 1D :


Colonnes de tranche utilisant des symboles d’index

Si vous n’avez pas vu la différence d’un coup d’œil, voici les deux définitions de tranches ci-dessus, ange[ » :,2:3"] vs index[ » :,2"], qui ont un impact important sur les résultats. Une référence complète au nouveau symbole de tranche se trouve sur le wiki de NumSharp.


Note : <T>ArraySlice

En implémentant le découpage des vues N-dimensionnelles, j’en ai conclu que cela pourrait être intéressant pour de nombreux autres domaines de .NET, alors je l’ai décomposé en ma propre bibliothèque autonome appelée SliceAndDice. Il est un wrapper léger pour indexer toute structure de données C# (comme ou) <T>ArraySlice, et permet d’utiliser les mêmes mécanismes de remodelage, de tranche et de visualisation sans tous les autres calculs numériques lourds. Il ne faut que quelques centaines de lignes de code pour obtenir d’excellentes capacités de découpage ! T[]IList<T>


Enveloppant

NumSharp a récemment reçu le même mécanisme de découpage et de visionnage, ce qui fait sans aucun doute de NumPy l’une des bibliothèques les plus importantes de l’écosystème de l’apprentissage automatique Python. SciSharp STACK est une organisation open source regroupant un petit nombre de développeurs qualifiés qui ont travaillé très dur pour apporter la même fonctionnalité dans le monde .NET. Les dernières améliorations de NumSharp sont une pierre angulaire importante pour y parvenir.


Langue source:La connexion hyperlientérée est visible.




Précédent:Contrôle de versionnement de gros fichiers git lfs
Prochain:Rocky Linux 9 wake sur LAN
 Propriétaire| Publié le 10-01-2025 à 12:18:43 |
NumSharp convient à divers scénarios, notamment la recherche éducative, l’analyse financière, le traitement d’images, l’apprentissage profond, et bien plus encore.

NumSharp, dans le cadre de la SciSharp.org, a été intégré dans une large gamme de NET Écosystème de calcul scientifique. Voici quelques éléments connexes et très complémentaires que vous vous recommandez d’explorer davantage :

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

En conclusion, NumSharp n’est pas seulement une bibliothèque puissante autonome, mais une connexion. Un nœud clé dans la communauté informatique scientifique de .NET.

Adresse du projet NumSharp :https://github.com/SciSharp/NumSharp
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com