Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 1906|Svare: 1

[Tips] [Oversettelse]. NumSharp array slicing-funksjon i NET/C#

[Kopier lenke]
Publisert 2025-1-10 12:17:13 | | | |

Takket være NumSharps flotte nye array slicing-muligheter er .NET-fellesskapet ett skritt nærmere å ha en kraftig åpen kildekode maskinlæringsplattform.

Python er et maskinlæringsspråk delvis fordi det har gode biblioteker som NumPy og TensorFlow. Men C#-utviklere har også et stort behov for kraftige åpen kildekode-biblioteker for maskinlæring og datavitenskap. NumSharp, NumPy C#-porten til SciSharp STACK-organisasjonen, har nylig tatt et stort steg fremover ved å fullt ut implementere slicing-muligheter, noe som tillater opprettelse av vilkårlige delmengder av N-dimensjonale matriser som effektive visninger av rådata. Dette gjør det til et nyttig verktøy for å bruke C# til maskinlæring sammen med TensorFlow.NET.


Hva er greia?

Hvis du ikke har brukt NumPy, vet du sannsynligvis ikke hvor bra slicing er. Python-arrayer tillater returnering av en slice av et array ved å indeksere en serie elementer, som følger: a[start:stop:step]. Men det er først med NumPys komplekse array-implementering at slicing blir en virkelig kraftfull datamanipulasjonsteknikk, uten hvilken maskinlæring eller datavitenskap ville vært utenkelig.

Heldigvis, for de som ikke kan eller ikke ønsker å bytte til Python for maskinlæring (som jeg også har laget), bringer NumSharp denne funksjonaliteten til .NET-verdenen. Som en av utviklerne hos NumSharp har jeg introdusert deg for noen viktige slicing-brukstilfeller med eksempelkodesnippets i C#. Merk at indeksering ikke kan gjøres i C# på samme måte som i Python på grunn av forskjeller i språksyntaks. Vi bestemte oss imidlertid for å beholde Python-syntaksen for slice-definisjoner, så vi brukte strenger for å indeksere slices i C#. Sjekk ut dette eksempelet for å se hvor nær NumSharp er NumPy.




Klipp ut kolonnen fra matrisen i Python/NumPy

Når den skrives i C# med NumSharp, er koden nesten identisk. Merk at skiver indekseres litt annerledes ved å bruke strenger som parametere for indekseren.




Kutt ut kolonner fra en matrise i C#/NumSharp

Som du kan se, har NumSharp-teamet lagt ned mye arbeid i å gjøre koden så lik Python som mulig. Dette er veldig viktig fordi eksisterende Python-kode som er avhengig av NumPy nå enkelt kan porteres til C#.


Brukstilfelle: Bruk flere visninger av de samme dataene



Å kunne sende kun lokale deler av underliggende data (dvs. små biter med store bilder) inn og ut av funksjoner uten kopiering er avgjørende for kjøreytelse, spesielt for store datasett. Snitt indekseres ved hjelp av lokale koordinater, så algoritmen din trenger ikke å kjenne den globale strukturen til dataene dine, noe som effektivt forenkler livet ditt og sikrer maksimal ytelse fordi unødvendig duplisering unngås.


Bruksområder: Sparsomme visninger og rekursiv slicing



En sparsom visning av et array kan lages ved å spesifisere steg forbi begynnelsen og slutten av snittområdet. Så vidt jeg vet, kan ikke engang C# 8.0 med den nye array slice-syntaksen gjøre dette. Denne funksjonen blir svært viktig når man håndterer sammenvevde data. Du kan designe algoritmen din for å håndtere kontinuerlige data og gi den spredte snitt som etterligner kontinuerlige datakilder, og dermed minimere kompleksiteten i algoritmen din.


Slicing kan skjæres videre, noe som er en veldig viktig funksjon hvis du jobber med data i høy dimensjon. Dette bidrar også til å redusere kompleksiteten i algoritmen, siden du kan redusere dimensjonaliteten til dataene ved å skjære rekursivt.


Brukstilfelle: Effektiv behandling av høydimensjonale data



Hvis du trenger å tenke på et array av data som et volum og jobbe med delene uten å måtte gjøre utrolige koordinattransformasjonsberegninger, er .reshape() din venn.
Alle arrays som opprettes ved eller slicing-operasjoner er .reshape(), bare en visning av de opprinnelige dataene. Når du iterererer, leser eller skriver elementer til en visning, får du tilgang til det rå dataarrayet. NumSharp utfører transparent de riktige indekstransformasjonene for deg, slik at du kan indeksere snitt med relative koordinater.


Brukstilfelle: Reverser rekkefølgen på elementene uten ekstra kostnad

Snitt som bruker negative steg reverserer faktisk rekkefølgen på snittene. Fordelen med det er at det ikke trenger å kopiere eller oppramse data for å gjøre dette, akkurat som IEnumerable.Reverse(). Forskjellen er at visningen (resultatet av operasjonen a["::-1"]) viser dataene i omvendt rekkefølge, og du kan indeksere til den inverterte sekvensen uten å opptelle den.


Brukstilfelle: Reduser kompleksiteten ved å redusere dimensjonene

Når man arbeider med høydimensjonale data, kan algoritmene for disse dataene også bli svært komplekse. I bruk kan ethvert høydimensjonalt volum skrives ut. Da ToString()s NumSharp-metode NDArray, la jeg merke til hvor enkel og vakker algoritmen har blitt ved systematisk og rekursivt å dele ND-volumer inn i (N-1)D-volumer, osv.

Denne del-og-hersk-tilnærmingen returnerer lavdimensjonale delvolumer ved å dele opp intervallsymbolene ved hjelp av NumSharps indekssymboler.

Intervallsymbol vs. indekssymbol

Rekkeviddesymbolet ["start:stopp:steg"] lar deg få tilgang til et delområde av et gitt volum med samme dimensjon. Så selv om du kutter ut bare én kolonne i 2D-matrisen, får du fortsatt en 2D-matrise med bare én kolonne. Her er et kort stykke C#-kode som demonstrerer dette:



Skjær kolonnen ved hjelp av intervallsymbolet

Indekssymbolet gir deg et (N-1) dimensjonalt snitt på det angitte stedet for det N-dimensjonale foreldrevolumet. Så å kutte ut en kolonne fra en 2D-matrise med indekssymboler gir deg en 1D-vektor:


Skjær kolonner ved bruk av indekssymboler

Hvis du ikke har sett forskjellen med et blikk, her er de to slice-definisjonene ovenfor side om side, ange[":,2:3"] vs index[":,2"], som har stor innvirkning på resultatene. En fullstendig referanse til det nye slice-symbolet finnes på NumSharp-wikien.


Merk: <T>ArraySlice

Da jeg implementerte slicing av N-dimensjonale visninger, konkluderte jeg med at det kunne være interessant for mange andre områder i .NET, så jeg delte det opp i mitt eget frittstående bibliotek kalt SliceAndDice. Det fungerer som en lettvektsinnpakning for indeksering av enhver C#-datastruktur (som ArraySlice<T>), og lar deg bruke de samme ommodellerings-, slicing- og visningsmekanismene uten alle de andre tunge numeriske beregningene. Det krever bare noen hundre linjer kode for å oppnå utmerkede slicing-egenskaper! T[]IList<T>


Wraparound

NumSharp har nylig fått samme slicing- og visningsmekanisme, noe som utvilsomt gjør NumPy til et av de viktigste bibliotekene i Pythons maskinlæringsøkosystem. SciSharp STACK er en åpen kildekode-organisasjon bestående av et lite antall dyktige utviklere som har jobbet svært hardt for å bringe samme funksjonalitet til .NET-verdenen. NumSharps siste forbedringer er en viktig hjørnestein for å oppnå dette.


Original:Innloggingen med hyperkoblingen er synlig.




Foregående:Git lfs versjonskontroll for store filer
Neste:Rocky Linux 9 wake på LAN
 Vert| Publisert 10.01.2025 12:18:43 |
NumSharp passer for ulike scenarier, inkludert utdanningsforskning, finansiell analyse, bildebehandling, dyp læring og mer.

NumSharp, som en del av SciSharp.org, har blitt integrert i et bredt spekter av NET vitenskapelig datasystem. Her er noen relaterte og svært komplementære produkter som anbefales for deg å utforske nærmere:

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

Avslutningsvis er NumSharp ikke bare et frittstående kraftfullt bibliotek, men en forbindelse. En nøkkelnode i .NETs vitenskapelige databehandlingsmiljø.

NumSharp-prosjektets adresse:https://github.com/SciSharp/NumSharp
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com