Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 1906|Válasz: 1

[Tippek] [Fordítás]. NumSharp tömbszelő funkció a NET/C#-ban

[Linket másol]
Közzétéve: 2025-1-10 12:17:13 | | | |

A NumSharp nagyszerű új tömbszelet-szeletelési képességeinek köszönhetően a .NET közösség egy lépéssel közelebb került ahhoz, hogy egy erőteljes nyílt forráskódú gépi tanulási platformot hozzon létre.

A Python részben gépi tanulási nyelv, mert nagyszerű könyvtárai vannak, mint a NumPy és a TensorFlow. Ugyanakkor a C# fejlesztőknek nagy szükségük van erős, nyílt forráskódú könyvtárakra a gépi tanuláshoz és adattudományhoz. A NumSharp, a SciSharp STACK szervezet NumPy C# portja, nemrégiben nagy lépést tett előre azzal, hogy teljes mértékben bevezette a szeletelési képességeket, lehetővé téve az N-dimenziós tömbök tetszőleges részhalmazainak létrehozását hatékony nyers adatnézetekként. Ez hasznos eszközsé teszi a C# gépi tanuláshoz a TensorFlow.NET-vel együtt.


Mi a nagy ügy?

Ha még nem használtad a NumPy-t, valószínűleg nem tudod, milyen jó a szeletelés. A Python tömbök lehetővé teszik, hogy egy tömbszelet visszaadjanak egy elemsorozat indexelésével, a következők szerint: a[start:stop:step]. De csak a NumPy összetett tömbmegvalósításával válik a szeletolás igazán hatékony adatmanipulációs technikává, amely nélkül a gépi tanulás vagy adattudomány elképzelhetetlen lenne.

Szerencsére azoknak, akik nem tudnak vagy nem akarnak Pythonra váltani gépi tanuláshoz (amit én is készítettem), a NumSharp ezt a képességet a .NET világába viszi. A NumSharp egyik fejlesztőjeként bemutattam néhány fontos szeletelési felhasználási esetet, például C# nyelvű mintakódrészletekkel. Fontos megjegyezni, hogy az indexelés nem végezhető C#-ban ugyanúgy, mint Pythonban, a nyelvi szintaxisban különbségek miatt. Azonban úgy döntöttünk, hogy megtartjuk a Python szintaxisát a szeletdefiníciókhoz, ezért stringeket használtunk a szeletek indexeléséhez C#-ban. Nézd meg ezt a példát, hogy mennyire közel van a NumSharp a NumPy-hoz.




Vágd ki az oszlopot a mátrixból Python/NumPy-ben

C#-ban NumSharp-szal írva a kód szinte teljesen azonos. Fontos megjegyezni, hogy a szeleteket kissé másképp indexelnek, mivel az indexelő paraméterei szerint stringeket használnak.




Vágj ki oszlopokat egy mátrixból C#/NumSharp nyelven

Ahogy láthatod, a NumSharp csapata sok energiát fektetett abba, hogy a kód a lehető leghasonlóbb legyen a Pythonhoz. Ez nagyon fontos, mert így a NumPy-ra épülő meglévő Python kód könnyen átültethető C#-ra.


Felhasználási eset: Több nézet ugyanazon adatból



Az, hogy csak helyi adatokat (azaz kis nagy képdarabokat) tudjunk be- és kijuttatni a függvények be- és kijárataiba másolás nélkül, kulcsfontosságú a futásidejű teljesítmény szempontjából, különösen nagy adathalmazok esetén. A szeleteket helyi koordináták alapján indexeljük, így az algoritmusodnak nem kell ismernie az adatok globális szerkezetét, ami hatékonyan egyszerűsíti az életedet és biztosítja a maximális teljesítményt, mert elkerülik a felesleges duplikálást.


Felhasználási esetek: Ritka nézetek és rekurzív szeletolás



Egy tömb ritka nézete úgy hozható létre, hogy a szelettartomány elején és végén lévő lépéseket megadunk. Tudomásom szerint még a C# 8.0 sem tudja ezt megoldani az új tömbszelő szintaxissal. Ez a funkció nagyon fontossá válik az interleaved adatokkal való kapcsolat során. Megtervezheted az algoritmusodat úgy, hogy folyamatos adatokat kezeljen, és ritka szeleteket adj neki, amelyek a folyamatos adatforrásokat utánozzák, minimalizálva az algoritmus bonyolultságát.


A szeletelés tovább szeletelhető, ami nagyon fontos funkció, ha nagy dimenziós adatokkal foglalkozunk. Ez segít csökkenteni az algoritmus összetettségét is, mivel az adatok dimenzióját rekurzív szeleteléssel csökkentheted.


Felhasználási eset: Hatékonyan feldolgozzák a nagy dimenziójú adatokat



Ha egy adattömböt kötetként kell elképzelni, és a részekkel dolgoznod anélkül, hogy hihetetlen koordináta-transzformációs számításokat kellene végezned, akkor a .reshape() a barátod.
Minden tömb, amelyet a szeletelési műveletek vagy a szeletelési műveletek hoznak, .reshape() csak az eredeti adatok egy nézete. Amikor iterálsz, olvasol vagy írsz elemeket egy nézethez, hozzáférsz a nyers adattömbhöz. A NumSharp átlátszóan végzi a megfelelő indextranszformációkat helyetted, így relatív koordinátákkal indexelheted a szeleteket.


Felhasználási eset: Az elemek sorrendjének megfordítása további költség nélkül

A negatív lépésekkel történő szeletek valójában megfordítják a szeletek sorrendjét. Az előnye, hogy ehhez nem kell adatokat másolni vagy felsorolni, akárcsak az IEnumerable.Reverse(). A különbség az, hogy a nézet (az a["::-1"]-művelet eredménye) fordított sorrendben jeleníti meg az adatokat, és indexelheted ezt a megfordított sorozatot anélkül, hogy felsorolnád.


Felhasználási eset: A komplexitás csökkentése dimenziók csökkentésével

Magas dimenziós adatokkal való munkavégzés során az algoritmusok is nagyon összetettek lehetnek. Használat közben bármilyen nagy dimenziós térfogat kimenetel. Amikor a ToString() NumSharp módszerét NDArray használta, észrevettem, milyen egyszerűvé és gyönyörűvé vált az algoritmus azzal, hogy rendszerszinten és rekurzívan vágja az ND térfogatokat (N-1)D térfogatokra stb.

Ez a megosztás és győzd meg megközelítés alacsony dimenziós alvolumeneket eredményez azáltal, hogy a tartományszimbólumokat a NumSharp indexszimbólumaival szeleteljük.

Távolságszimbólum vs. indexszimbólum

A tartományszimbólum ["start:stop:step"] lehetővé teszi, hogy hozzáférj egy adott térfogat altartományához, amelynek mérete ugyanazzal a mérettel. Tehát még ha csak egy oszlopot vágsz ki a 2D mátrixból, akkor is kapsz egy 2D mátrixot egyetlen oszloppal. Íme egy rövid C# kóddarab, amely ezt jól mutatja:



Vágd az oszlopot a tartomány szimbólummal

Az indexszimbólum egy (N-1) dimenziós szeletet ad az N-dimenziós szülői térfogat megadott helyén. Tehát egy oszlopot kivágva egy 2D mátrixból indexszimbólumokkal egy 1D vektort kapunk:


Szeletoszlopok indexszimbólumokkal

Ha még nem láttad a különbséget első pillantással, itt van a fenti két szelet definíció egymás mellett: ange[":,2:3"] vs index[":,2"], amelyek nagy hatással vannak az eredményekre. Az új szeletszimbólumra teljes hivatkozás megtalálható a NumSharp wikin.


Megjegyzés: <T>ArraySlice

Az N-dimenziós nézetek szeletelésének megvalósítása során arra a következtetésre jutottam, hogy ez sok más terület számára is érdekes lehet a .NET-ben, ezért saját önálló könyvtáramba, a SliceAndDice-ba bontottam. Könnyű csomagolásként szolgál bármilyen C# adatszerkezet (például ArraySlice) <T>indexeléséhez, és lehetővé teszi, hogy ugyanazokat a átalakítási, szeletelési és megtekintési mechanizmusokat használd anélkül, hogy a többi nehéz numerikus számítást igényelnénk. Csak néhány száz sor kód kell ahhoz, hogy kiváló szeletelési képességeket érj el! T[]IList<T>


Wraparound

A NumSharp nemrégiben ugyanezt a szeletelési és megtekintési mechanizmust kapta meg, ami kétségtelenül a NumPy-t a Python gépi tanulási ökoszisztéma egyik legfontosabb könyvtárává teszi. A SciSharp STACK egy nyílt forráskódú szervezet, amely néhány tapasztalt fejlesztőből áll, akik keményen dolgoztak azon, hogy ugyanazt a funkciót hozzák a .NET világába. A NumSharp legújabb fejlesztései fontos alapkövei ennek elérésének.


Eredeti:A hiperlink bejelentkezés látható.




Előző:Git lfs nagy fájlverziós vezérlés
Következő:Rocky Linux 9 wake on lan
 Háziúr| Közzétéve: 2025-1-10 12:18:43 |
A NumSharp különböző helyzetekre alkalmas, beleértve az oktatási kutatást, pénzügyi elemzést, képfeldolgozást, mélytanulást és még sok mást.

A NumSharp, a SciSharp.org részeként, széles körű beépült NET Tudományos Számítástechnikai Ökoszisztémá. Íme néhány kapcsolódó és nagyon kiegészítő tárgy, amelyeket ajánlanak neked további felfedezésre:

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

Összefoglalva, a NumSharp nem csupán önálló, erős könyvtár, hanem egy kapcsolat. Kulcsfontosságú csomópont a .NET tudományos számítástechnikai közösségben.

NumSharp projekt címe:https://github.com/SciSharp/NumSharp
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com