Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 1906|Svar: 1

[Tips] [Oversættelse]. NumSharp array slicing-funktion i NET/C#

[Kopier link]
Opslået den 10-01-2025 kl. 12:17:13 | | | |

Takket være NumSharps fantastiske nye array slicing-muligheder er .NET-fællesskabet et skridt nærmere at have en kraftfuld open source maskinlæringsplatform.

Python er et maskinlæringssprog delvist fordi det har gode biblioteker som NumPy og TensorFlow. Dog har C#-udviklere også et stort behov for kraftfulde open source-biblioteker til maskinlæring og data science. NumSharp, NumPy C#-porten fra SciSharp STACK-organisationen, har for nylig taget et stort skridt fremad ved fuldt ud at implementere slicing-muligheder, hvilket muliggør oprettelse af vilkårlige delmængder af N-dimensionelle arrays som effektive visninger af rå data. Det gør det til et nyttigt værktøj til at bruge C# til maskinlæring sammen med TensorFlow.NET.


Hvad er det store problem?

Hvis du ikke har brugt NumPy, ved du sandsynligvis ikke, hvor god slicing er. Python-arrays tillader at returnere et snit af et array ved at indeksere en række elementer, som følger: a[start:stop:step]. Men kun med NumPys komplekse array-implementering bliver slicing en virkelig kraftfuld datamanipulationsteknik, uden hvilken maskinlæring eller datavidenskab ville være utænkelig.

Heldigvis, for dem der ikke kan eller ikke ønsker at skifte til Python for maskinlæring (som jeg også har lavet), bringer NumSharp denne funktion til .NET-verdenen. Som en af udviklerne hos NumSharp har jeg introduceret dig til nogle vigtige slicing-anvendelsestilfælde med eksempelkodeuddrag i C#. Bemærk, at indeksering ikke kan udføres i C# på samme måde som i Python på grund af forskelle i sprogets syntaks. Vi besluttede dog at beholde Python-syntaksen til slice-definitioner, så vi brugte strenge til at indeksere slices i C#. Se dette eksempel for at se, hvor tæt NumSharp er på NumPy.




Klip kolonnen ud af matricen i Python/NumPy

Når den skrives i C# med NumSharp, er koden næsten identisk. Bemærk, at skiver indekseres lidt anderledes ved at bruge strenge som parametre for indekseren.




Udklip kolonner fra en matrix i C#/NumSharp

Som du kan se, har NumSharp-teamet lagt meget arbejde i at gøre koden så lig Python som muligt. Dette er meget vigtigt, fordi eksisterende Python-kode, der er afhængig af NumPy, på denne måde nu nemt kan porteres til C#.


Brugstilfælde: Brug flere visninger af de samme data



At kunne sende kun lokale dele af de underliggende data (dvs. små stykker store billeder) ind og ud af funktioner uden kopiering er afgørende for kørselshastighed, især for store datasæt. Snit indekseres ved hjælp af lokale koordinater, så din algoritme behøver ikke kende den globale struktur af dine data, hvilket effektivt forenkler dit liv og sikrer maksimal ydeevne, fordi unødvendig duplikering undgås.


Brugstilfælde: Sparsomme visninger og rekursiv slicing



Et sparsomt overblik over et array kan skabes ved at specificere trin ud over begyndelsen og slutningen af snitområdet. Så vidt jeg ved, kan selv C# 8.0 med den nye array slice-syntaks ikke gøre dette. Denne funktion bliver meget vigtig, når man arbejder med sammenflettede data. Du kan designe din algoritme til at håndtere kontinuerlige data og give den sparsomme snit, der efterligner kontinuerlige datakilder, hvilket minimerer kompleksiteten af din algoritme.


Slicing kan skæres yderligere, hvilket er en meget vigtig funktion, hvis du arbejder med højdimensionelle data. Dette hjælper også med at reducere algoritmens kompleksitet, da du kan reducere dataenes dimensionalitet ved rekursivt at skære.


Brugstilfælde: Effektiv behandling af højdimensionelle data



Hvis du skal tænke på et array af data som et volumen og arbejde med dets dele uden at skulle lave utrolige koordinattransformationsberegninger, så er .reshape() din ven.
Alle arrays oprettet ved eller slicing-operationer er .reshape(), blot en visning af de oprindelige data. Når du iterererer, læser eller skriver elementer til en visning, får du adgang til det rå dataarray. NumSharp udfører transparent de relevante indekstransformationer for dig, så du kan indeksere skiver med relative koordinater.


Brugstilfælde: Vend elementernes rækkefølge om uden ekstra omkostninger

Snit, der bruger negative skridt, vender faktisk rækkefølgen af skiverne om. Fordelen ved det er, at det ikke behøver at kopiere eller opregne data for at gøre dette, ligesom IEnumerable.Reverse(). Forskellen er, at visningen (resultatet af operationen a["::-1"]) viser dataene i omvendt rækkefølge, og du kan indeksere til den inverterede sekvens uden at opregne den.


Brugstilfælde: Reducer kompleksiteten ved at reducere dimensioner

Når man arbejder med højdimensionelle data, kan algoritmerne for disse data også blive meget komplekse. I brug kan ethvert højdimensionelt volumen outputtes. Da jeg benyttede ToString()'s NumSharp-metode NDArray, bemærkede jeg, hvor simpel og smuk algoritmen er blevet ved systematisk og rekursivt at skære ND-volumer i (N-1)D-volumer osv.

Denne del-og-hersk-tilgang returnerer lavdimensionelle delvolumer ved at skære intervalsymbolerne med NumSharps indekssymboler.

Intervalsymbol vs. indekssymbol

Rækkeviddesymbolet ["start:stop:trin"] giver dig adgang til et delområde af et givent volumen med samme dimension. Så selv hvis du kun skærer én kolonne ud af 2D-matricen, får du stadig en 2D-matrix med kun én kolonne. Her er et kort stykke C#-kode, der demonstrerer dette:



Skær kolonnen ved hjælp af intervalsymbolet

Indekssymbolet giver dig et (N-1) dimensionelt snit på det angivne sted for det N-dimensionale forældrevolumen. Så ved at skære en kolonne ud af en 2D-matrix ved hjælp af indekssymboler får du en 1D-vektor:


Slice kolonner ved brug af indekssymboler

Hvis du ikke har set forskellen med det samme, er her de to slice-definitioner ovenfor side om side, ange vs index[":,2"], som har stor betydning for resultaterne. En fuld reference til det nye snitsymbol kan findes på NumSharp-wikien.


Bemærk: <T>ArraySlice

Ved implementeringen af slicing af N-dimensionelle visninger konkluderede jeg, at det kunne være interessant for mange andre områder i .NET, så jeg opdelte det i mit eget selvstændige bibliotek kaldet SliceAndDice. Den fungerer som en letvægts wrapper til indeksering af enhver C#-datastruktur (såsom ArraySlice<T>) og tillader dig at bruge de samme omstrukturerings-, slicing- og visningsmekanismer uden alle de andre tunge numeriske beregninger. Det kræver kun et par hundrede linjer kode at opnå fremragende slicing-evner! T[]IList<T>


Wraparound

NumSharp har for nylig fået samme slicing- og visningsmekanisme, hvilket uden tvivl gør NumPy til et af de vigtigste biblioteker i Pythons maskinlæringsøkosystem. SciSharp STACK er en open source-organisation bestående af et lille antal dygtige udviklere, som har arbejdet meget hårdt for at bringe den samme funktionalitet til .NET-verdenen. NumSharps seneste forbedringer er en vigtig hjørnesten i at opnå dette.


Oprindelig:Hyperlink-login er synlig.




Tidligere:Git lfs versionsstyring af store filer
Næste:Rocky Linux 9 wake på LAN
 Udlejer| Opslået den 1-1-2025 12:18:43 |
NumSharp er velegnet til forskellige scenarier, herunder uddannelsesforskning, finansiel analyse, billedbehandling, deep learning og mere.

NumSharp er som en del af SciSharp.org blevet integreret i en bred vifte af NET Videnskabelig Beregningsøkosystem. Her er nogle relaterede og meget komplementære ting, som anbefales for dig at udforske nærmere:

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

Afslutningsvis er NumSharp ikke bare et selvstændigt kraftfuldt bibliotek, men en forbindelse. En nøgleknude i .NET videnskabelige computing-fællesskabet.

NumSharp Projektadresse:https://github.com/SciSharp/NumSharp
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com