Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 1906|Atsakyti: 1

[Patarimai] [Vertimas]. "NumSharp" masyvo pjaustymo funkcija NET/C#

[Kopijuoti nuorodą]
Publikuota: 2025-1-10 12:17:13 | | | |

Dėl puikių naujų "NumSharp" masyvo pjaustymo galimybių .NET bendruomenė yra vienu žingsniu arčiau galingos atvirojo kodo mašininio mokymosi platformos.

Python yra mašininio mokymosi kalba iš dalies todėl, kad joje yra puikių bibliotekų, tokių kaip NumPy ir TensorFlow. Tačiau C# kūrėjams taip pat labai reikia galingų atvirojo kodo bibliotekų, skirtų mašininiam mokymuisi ir duomenų mokslui. "NumSharp", "SciSharp STACK" organizacijos "NumPy C#" prievadas, neseniai žengė didelį žingsnį į priekį, visiškai įdiegdamas pjaustymo galimybes, leidžiančias sukurti savavališkus N matmenų masyvų pogrupius kaip efektyvius neapdorotų duomenų rodinius. Dėl to tai yra naudingas įrankis naudojant C# mašininiam mokymuisi kartu su TensorFlow.NET.


Kas čia per didelis?

Jei nenaudojote "NumPy", tikriausiai nežinote, koks puikus pjaustymas. Python masyvai leidžia grąžinti masyvo gabalėlį indeksuojant elementų seriją taip: a[start:stop:step]. Tačiau tik įdiegus sudėtingą "NumPy" masyvą, pjaustymas tampa tikrai galinga duomenų manipuliavimo technika, be kurios neįsivaizduojamas mašininis mokymasis ar duomenų mokslas.

Laimei, tiems, kurie negali ar nenori pereiti prie Python mašininiam mokymuisi (kurį aš taip pat sukūriau), "NumSharp" suteikia šią galimybę .NET pasauliui. Kaip vienas iš "NumSharp" kūrėjų, supažindinau jus su kai kuriais svarbiais pjaustymo naudojimo atvejais su kodo fragmentų pavyzdžiais C#. Atminkite, kad indeksavimas negali būti atliekamas C# taip pat, kaip Python dėl kalbos sintaksės skirtumų. Tačiau nusprendėme išlaikyti Python sintaksę pjūvių apibrėžimams, todėl naudojome eilutes, kad indeksuotume pjūvius C#. Peržiūrėkite šį pavyzdį, kad sužinotumėte, kiek "NumSharp" yra arti "NumPy".




Iškirpkite stulpelį iš matricos Python/NumPy

Kai parašyta C# su NumSharp, kodas yra beveik identiškas. Atkreipkite dėmesį, kad segmentai indeksuojami šiek tiek kitaip, naudojant eilutes kaip indeksavimo priemonės parametrus.




Iškirpkite stulpelius iš matricos C#/NumSharp

Kaip matote, "NumSharp" komanda įdėjo daug pastangų, kad kodas būtų kuo panašesnis į Python. Tai labai svarbu, nes tokiu būdu esamą Python kodą, kuris remiasi NumPy, dabar galima lengvai perkelti į C#.


Naudojimo atvejis: naudokite kelis tų pačių duomenų rodinius



Galimybė perduoti tik vietines pagrindinių duomenų dalis (t. y. mažas didelių vaizdų dalis) į funkcijas ir iš jų nekopijuojant yra labai svarbi vykdymo laiko našumui, ypač dideliems duomenų rinkiniams. Pjūviai indeksuojami naudojant vietines koordinates, todėl jūsų algoritmui nereikia žinoti pasaulinės duomenų struktūros, todėl efektyviai supaprastinamas jūsų gyvenimas ir užtikrinamas maksimalus našumas, nes išvengiama nereikalingo dubliavimo.


Naudojimo atvejai: reti rodiniai ir rekursyvus pjaustymas



Retą masyvo vaizdą galima sukurti nurodant veiksmus, esančius už pjūvio diapazono pradžios ir pabaigos. Kiek žinau, net C # 8.0 su nauja masyvo slice sintaksė negali to padaryti. Ši funkcija tampa labai svarbi dirbant su persipynusiais duomenimis. Galite sukurti savo algoritmą taip, kad jis apdorotų nuolatinius duomenis ir pateikti jam retas dalis, imituojančias nuolatinius duomenų šaltinius, sumažindami algoritmo sudėtingumą.


Pjaustymą galima pjaustyti toliau, o tai yra labai svarbi funkcija, jei dirbate su didelių matmenų duomenimis. Tai taip pat padeda sumažinti algoritmo sudėtingumą, nes rekursyviai pjaustydami galite sumažinti duomenų matmenis.


Naudojimo atvejis: efektyviai apdorokite didelių matmenų duomenis



Jei jums reikia galvoti apie duomenų masyvą kaip apie tūrį ir dirbti su jo dalimis neatliekant neįtikėtinų koordinačių transformacijos skaičiavimų, tada .reshape() yra jūsų draugas.
Visi masyvai, sukurti arba pjaustymo operacijų yra .reshape() tik pradinių duomenų rodinys. Kai kartojate, skaitote arba rašote elementus rodinyje, pasiekiate neapdorotų duomenų masyvą. "NumSharp" skaidriai atlieka atitinkamas indekso transformacijas, todėl galite indeksuoti skilteles su santykinėmis koordinatėmis.


Naudojimo atvejis: pakeiskite elementų tvarką be papildomų išlaidų

Pjūviai, naudojantys neigiamus žingsnius, iš tikrųjų pakeičia pjūvių tvarką. Jo privalumas yra tas, kad tam nereikia kopijuoti ar išvardyti duomenų, kaip ir IEnumerable.Reverse(). Skirtumas tas, kad rodinyje (operacijos rezultatas a["::-1"]) duomenys rodomi atvirkštine tvarka, ir jūs galite indeksuoti tą apverstą seką jų neišvardindami.


Naudojimo atvejis: sumažinkite sudėtingumą sumažindami matmenis

Dirbant su didelių matmenų duomenimis, tų duomenų algoritmai taip pat gali tapti labai sudėtingi. Naudojant galima išvesti bet kokį didelių matmenų tūrį. Kai ToString() NumSharp metodas NDArray, pastebėjau, koks paprastas ir gražus algoritmas tapo sistemingai ir rekursyviai pjaustant ND tomus į (N-1)D tomus ir t.t.

Šis "skaldyk ir valdyk" metodas grąžina mažų matmenų subtomus, supjaustydamas diapazono simbolius naudojant "NumSharp" indekso simbolius.

Diapazono simbolis ir rodyklės simbolis

Diapazono simbolis ["start:stop:step"] leidžia pasiekti tam tikro tomo subdiapazoną su tuo pačiu matmeniu. Taigi, net jei iškirpsite tik vieną 2D matricos stulpelį, vis tiek gausite 2D matricą tik su vienu stulpeliu. Štai trumpas C# kodo gabalas, kuris tai parodo:



Supjaustykite stulpelį naudodami diapazono simbolį

Rodyklės simbolis suteikia (N-1) matmenų pjūvį nurodytoje N matmenų pirminio tūrio vietoje. Taigi iškirpus stulpelį iš 2D matricos naudojant indekso simbolius, gaunamas 1D vektorius:


Stulpelių skaidymas naudojant rodyklės simbolius

Jei nematėte skirtumo iš pirmo žvilgsnio, čia yra du aukščiau esantys apibrėžimai, ange[":,2:3"] vs index[":,2"], kurie turi didelę įtaką rezultatams. Visą nuorodą į naują pjūvio simbolį galima rasti NumSharp wiki.


Pastaba: <T>ArraySlice

Įgyvendindamas N-dimensijų rodinių pjaustymą, padariau išvadą, kad jis gali būti įdomus daugeliui kitų .NET sričių, todėl suskaidžiau jį į savo atskirą biblioteką, vadinamą SliceAndDice. Jis pasižymi lengvu įvyniojimu, skirtu indeksuoti bet kokią C# duomenų struktūrą (pvz., arba) ArraySlice<T>, ir leidžia naudoti tuos pačius pertvarkymo, pjaustymo ir peržiūros mechanizmus be visų kitų sunkių skaitinių skaičiavimų. Norint pasiekti puikias pjaustymo galimybes, reikia tik kelių šimtų kodo eilučių! T[]IList<T>


Apvyniojimas

"NumSharp" neseniai buvo suteiktas tas pats pjaustymo ir peržiūros mechanizmas, todėl "NumPy" neabejotinai yra viena iš svarbiausių bibliotekų Python mašininio mokymosi ekosistemoje. "SciSharp STACK" yra atvirojo kodo organizacija, kurią sudaro nedidelis skaičius kvalifikuotų kūrėjų, kurie labai sunkiai dirbo, kad tas pačias funkcijas įdiegtų .NET pasaulyje. Naujausi "NumSharp" patobulinimai yra svarbus kertinis akmuo siekiant šio tikslo.


Originalus:Hipersaito prisijungimas matomas.




Ankstesnis:Git lfs didelių failų versijų kūrimo valdymas
Kitą:Rocky Linux 9 pažadinti LAN
 Savininkas| Paskelbta 2025-1-10 12:18:43 |
"NumSharp" tinka įvairiems scenarijams, įskaitant švietimo tyrimus, finansinę analizę, vaizdų apdorojimą, gilų mokymąsi ir kt.

"NumSharp", kaip SciSharp.org dalis, buvo integruota į įvairias NET mokslinių skaičiavimų ekosistema. Štai keletas susijusių ir labai vienas kitą papildančių elementų, kuriuos rekomenduojama ištirti toliau:

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

Apibendrinant galima pasakyti, kad "NumSharp" yra ne tik atskira galinga biblioteka, bet ir ryšys. Pagrindinis .NET mokslinių kompiuterių bendruomenės mazgas.

"NumSharp" projekto adresas:https://github.com/SciSharp/NumSharp
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com