Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 1906|Odgovoriti: 1

[Napitnine] [Prevod]. Funkcija rezanja polja NumSharp v NET/C#

[Kopiraj povezavo]
Objavljeno 10. 1. 2025 ob 12:17:13 | | | |

Zahvaljujoč odličnim novim zmožnostim rezanja polj v NumSharpu je .NET skupnost korak bližje zmogljivi odprtokodni platformi za strojno učenje.

Python je jezik strojnega učenja deloma zato, ker ima odlične knjižnice, kot sta NumPy in TensorFlow. Vendar pa razvijalci C# močno potrebujejo tudi zmogljive odprtokodne knjižnice za strojno učenje in podatkovno znanost. NumSharp, NumPy C# prenos organizacije SciSharp STACK, je pred kratkim naredil velik korak naprej z popolno implementacijo zmogljivosti rezanja, kar omogoča ustvarjanje poljubnih podmnožic N-dimenzionalnih polj kot učinkovitih pogledov surovih podatkov. To ga naredi uporabno orodje za uporabo C# za strojno učenje skupaj z TensorFlow.NET.


Kaj je tako posebnega?

Če še niste uporabljali NumPy, verjetno ne veste, kako odlično je rezanje. Python polja omogočajo vrnitev rezine polja z indeksiranjem vrste elementov, kot sledi: a[start:stop:step]. A šele z NumPyjevo kompleksno implementacijo polj postane rezanje resnično zmogljiva tehnika manipulacije podatkov, brez katere bi bilo strojno učenje ali podatkovna znanost nepredstavljiva.

Na srečo, za tiste, ki ne morejo ali nočejo preiti na Python za strojno učenje (ki sem ga prav tako ustvaril), NumSharp to zmožnost prinaša v .NET svet. Kot eden od razvijalcev pri NumSharp sem vam predstavil nekaj pomembnih primerov uporabe rezanja z vzorci kode v C#. Upoštevajte, da indeksiranja v C# ni mogoče izvajati na enak način kot v Pythonu zaradi razlik v sintaksi jezika. Vendar smo se odločili ohraniti Python sintakso za definicije rezkov, zato smo v C# uporabili nize za indeksiranje rezin. Oglejte si ta primer, da vidite, kako blizu je NumSharp NumPy.




Izrežite stolpec iz matrike v Pythonu/NumPy

Ko je koda napisana v C# z NumSharpom, je skoraj identična. Upoštevajte, da so rezine indeksirane nekoliko drugače, če uporabimo nize kot parametre za indeksator.




Izrežite stolpce iz matrike v C#/NumSharp

Kot vidite, je ekipa NumSharp vložila veliko truda, da je koda čim bolj podobna Pythonu. To je zelo pomembno, saj je na ta način mogoče obstoječo Python kodo, ki temelji na NumPy, enostavno prenesti v C#.


Primer uporabe: Uporaba več pogledov istih podatkov



Možnost posredovanja le lokalnih delov osnovnih podatkov (tj. majhnih kosov velikih slik) v in iz funkcij brez kopiranja je ključna za zmogljivost v času izvajanja, še posebej pri velikih podatkovnih nizih. Rezine so indeksirane z lokalnimi koordinatami, zato vaš algoritem ne potrebuje poznavanja globalne strukture vaših podatkov, kar učinkovito poenostavi vaše življenje in zagotavlja maksimalno zmogljivost, saj se prepreči nepotrebno podvajanje.


Primeri uporabe: Redki pogledi in rekurzivno rezanje



Redek pogled na polje lahko ustvarimo z določitvijo korakov onkraj začetka in konca razpona rezine. Kolikor vem, tudi C# 8.0 z novo sintakso array slice tega ne zmore. Ta funkcija postane zelo pomembna pri delu z prepletenimi podatki. Algoritem lahko oblikujete tako, da obdeluje zvezne podatke in mu zagotovite redke rezine, ki posnemajo neprekinjene vire podatkov, s čimer zmanjšate kompleksnost algoritma.


Rezanje je mogoče še dodatno razrezati, kar je zelo pomembna lastnost, če delate z visokodimenzionalnimi podatki. To prav tako pomaga zmanjšati kompleksnost algoritma, saj lahko z rekurzivnim rezanjem zmanjšate dimenzionalnost podatkov.


Primer uporabe: Učinkovita obdelava visokodimenzionalnih podatkov



Če moraš razmišljati o polju podatkov kot o volumnu in delati z njegovimi deli brez neverjetnih izračunov transformacij koordinat, potem je .reshape() pravi prijatelj.
Vsa polja, ustvarjena z operacijami rezanja ali rezanja, so .reshape(), le pogled na izvirne podatke. Ko iterjate, berete ali pišete elemente v pogled, dostopate do surovega podatkovnega polja. NumSharp transparentno izvede ustrezne indeksne transformacije namesto vas, tako da lahko indeksirate rezine z relativnimi koordinatami.


Primer uporabe: Obrniti vrstni red elementov brez dodatnih stroškov

Rezine, ki uporabljajo negativne korake, dejansko obrnejo vrstni red rezin. Prednost tega je, da za to ni treba kopirati ali enumerirati podatkov, tako kot IEnumerable.Reverse(). Razlika je v tem, da pogled (rezultat operacije a["::-1"]) prikazuje podatke v obratnem vrstnem redu, in lahko indeksirate na to inverzno zaporedje, ne da bi ga naštevali.


Primer uporabe: Zmanjšanje kompleksnosti z zmanjšanjem dimenzij

Pri delu z visokodimenzionalnimi podatki so algoritmi za te podatke lahko zelo zapleteni. V uporabi je mogoče izhoditi katerikoli visokodimenzionalni volumen. Ko je ToString() uporabil NumSharp metodo NDArray, sem opazil, kako preprost in lep je algoritem postal z sistematičnim in rekurzivnim rezanjem ND volumnov na (N-1)D volumne itd.

Ta pristop deli in vladaj vrne nizkodimenzionalne podvolumne z rezanjem simbolov razpona z indeksnimi simboli NumSharpa.

Simbol razpona proti indeksnemu simbolu

Simbol območja ["start:stop:step"] omogoča dostop do podobmočja določenega volumna z enako dimenzijo. Torej, tudi če izrežete le en stolpec 2D matrike, boste še vedno dobili 2D matriko z le enim stolpcem. Tukaj je kratek del C# kode, ki to dokazuje:



Prerežite stolpec z uporabo simbola za razpon

Indeksni simbol vam daje (N-1) dimenzionalni rez na določeni lokaciji N-dimenzionalnega starševskega volumna. Torej, izrezovanje stolpca iz 2D matrike z uporabo indeksnih simbolov dobi 1D vektor:


Rezalni stolpci z uporabo indeksnih simbolov

Če razlike še niste opazili na prvi pogled, sta tukaj dve zgornji definiciji rezin ena ob drugi, ange[":,2:3"] proti indeksu[":,2"], ki močno vplivata na rezultate. Celoten vir novega simbola rezine je na voljo na NumSharp wiki.


Opomba: <T>ArraySlice

Pri implementaciji rezanja N-dimenzionalnih pogledov sem sklenil, da bi bilo to zanimivo tudi za mnoga druga področja .NET-a, zato sem to razdelil v svojo samostojno knjižnico z imenom SliceAndDice. Omogoča lahkotno ovojnico za indeksiranje katere koli C# podatkovne strukture (kot je or) ArraySlice <T>in omogoča uporabo istih mehanizmov za preoblikovanje, rezanje in ogled brez vseh drugih zahtevnih numeričnih izračunov. Za dosego odličnih zmožnosti rezanja je potrebnih le nekaj sto vrstic kode! T[]IList<T>


Wraparound

NumSharp je nedavno dobil enak mehanizem rezanja in ogleda, kar nedvomno uvršča NumPy med najpomembnejše knjižnice v ekosistemu strojnega učenja Pythona. SciSharp STACK je odprtokodna organizacija majhnega števila usposobljenih razvijalcev, ki so zelo trdo delali, da bi enako funkcionalnost prenesli v .NET svet. Najnovejše izboljšave NumSharpa so pomemben temelj pri doseganju tega.


Izvirno:Prijava do hiperpovezave je vidna.




Prejšnji:Git lfs nadzor za verzioniranje velikih datotek
Naslednji:Rocky Linux 9 wake on lan
 Najemodajalec| Objavljeno 10. 1. 2025 ob 12:18:43 |
NumSharp je primeren za različne scenarije, vključno z izobraževalnimi raziskavami, finančno analizo, obdelavo slik, globokim učenjem in še več.

NumSharp je bil kot del SciSharp.org integriran v širok nabor NET znanstveni računalniški ekosistem. Tukaj je nekaj sorodnih in zelo dopolnjujočih predmetov, ki jih priporočam za nadaljnje raziskovanje:

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

Za zaključek, NumSharp ni le samostojna zmogljiva knjižnica, ampak povezava. Ključno vozlišče v skupnosti znanstvenega računalništva .NET.

Naslov projekta NumSharp:https://github.com/SciSharp/NumSharp
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com