Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 1906|Odpoveď: 1

[Tipy] [Preklad]. Funkcia rezania polí NumSharp v NET/C#

[Kopírovať odkaz]
Zverejnené 10.1.2025 o 12:17:13 | | | |

Vďaka skvelým novým schopnostiam NumSharp v oblasti slicingu polí je .NET komunita o krok bližšie k tomu, aby mala silnú open-source platformu strojového učenia.

Python je jazyk strojového učenia aj preto, že má skvelé knižnice ako NumPy a TensorFlow. Vývojári v C# však tiež veľmi potrebujú výkonné open-source knižnice pre strojové učenie a dátovú vedu. NumSharp, NumPy C# port organizácie SciSharp STACK, nedávno urobil veľký krok vpred tým, že plne implementoval možnosti rezania, čo umožňuje vytvárať ľubovoľné podmnožiny N-rozmerných polí ako efektívne zobrazenie surových dát. To z neho robí užitočný nástroj na použitie C# pre strojové učenie v kombinácii s TensorFlow.NET.


Čo je na tom také veľké?

Ak ste NumPy nepoužívali, pravdepodobne neviete, aké skvelé je rezanie. Python polia umožňujú vrátiť časť poľa indexovaním série prvkov, nasledovne: a[start:stop:step]. Až s komplexnou implementáciou polí v NumPy sa však slicing stáva skutočne silnou technikou manipulácie s dátami, bez ktorej by strojové učenie alebo dátová veda boli nepredstaviteľné.

Našťastie, pre tých, ktorí nemôžu alebo nechcú prejsť na Python pre strojové učenie (čo som vytvoril aj ja), NumSharp prináša túto možnosť do .NET sveta. Ako jeden z vývojárov v NumSharp som vám predstavil niekoľko dôležitých prípadov použitia slicingu pomocou ukážkových úryvkov kódu v C#. Treba poznamenať, že indexovanie v C# nie je možné vykonávať rovnakým spôsobom ako v Pythone kvôli rozdielom v syntaxi jazyka. Rozhodli sme sa však ponechať syntax Pythonu pre definície rezkov, takže sme použili reťazce na indexovanie rezkov v C#. Pozrite si tento príklad, aby ste videli, ako blízko je NumSharp k NumPy.




Vystrihnite stĺpec z matice v Pythone/NumPy

Keď je kód napísaný v C# pomocou NumSharp, je takmer identický. Všimnite si, že rezy sú indexované mierne odlišne pri používaní reťazcov ako parametrov pre indexer.




Vystrihnite stĺpce z matice v C#/NumSharp

Ako vidíte, tím NumSharp vynaložil veľa úsilia na to, aby bol kód čo najviac podobný Pythonu. To je veľmi dôležité, pretože týmto spôsobom je možné existujúci Python kód, ktorý sa spolieha na NumPy, ľahko portovať do C#.


Prípad použitia: Použitie viacerých pohľadov na tie isté dáta



Schopnosť prenášať iba lokálne časti základných dát (t. j. malé časti veľkých obrázkov) do a z funkcií bez kopírovania je kľúčová pre výkon v behu, najmä pri veľkých dátových súboroch. Rezy sú indexované pomocou lokálnych súradníc, takže váš algoritmus nemusí poznať globálnu štruktúru dát, čo vám efektívne zjednodušuje život a zabezpečuje maximálny výkon, pretože sa predchádza zbytočnému duplikátu.


Prípady použitia: Riedke pohľady a rekurzívne rezanie



Riedky pohľad na pole možno vytvoriť špecifikovaním krokov za začiatkom a koncom rozsahu rezu. Pokiaľ viem, ani C# 8.0 s novou syntaxou array slice to nedokáže. Táto vlastnosť je veľmi dôležitá pri práci s prekladanými dátami. Môžete navrhnúť svoj algoritmus tak, aby spracovával kontinuálne dáta a poskytoval mu riedke rezy, ktoré napodobňujú kontinuálne zdroje dát, čím minimalizujete zložitosť algoritmu.


Rezanie sa dá ďalej rozrezať, čo je veľmi dôležitá vlastnosť, ak pracujete s vysokorozmernými dátami. To tiež pomáha znížiť zložitosť algoritmu, pretože môžete znížiť dimenzionalitu dát rekurzívnym rezaním.


Prípad použitia: Efektívne spracovanie vysokorozmerných dát



Ak potrebujete myslieť na pole dát ako na objem a pracovať s jeho časťami bez toho, aby ste museli robiť neuveriteľné výpočty transformácie súradníc, potom .reshape() je váš priateľ.
Všetky polia vytvorené alebo slicing operáciami sú .reshape(), len pohľad na pôvodné dáta. Keď iterujete, čítate alebo zapisujete prvky do zobrazenia, pristupujete k surovému dátovému poľu. NumSharp transparentne vykonáva príslušné indexové transformácie za vás, takže môžete indexovať rezy s relatívnymi súradnicami.


Prípad použitia: Obrátiť poradie prvkov bez ďalších nákladov

Rezy používajúce záporné kroky v skutočnosti obracia poradie rezov. Výhodou je, že na to nemusí kopírovať ani enumerovať dáta, podobne ako IEnumerable.Reverse(). Rozdiel je v tom, že pohľad (výsledok operácie a["::-1"]) zobrazuje údaje v opačnom poradí a môžete indexovať na túto invertovanú sekvenciu bez jej vymenovania.


Prípad použitia: Znížiť zložitosť zmenšením rozmerov

Pri práci s vysokorozmernými dátami môžu byť algoritmy pre tieto dáta tiež veľmi zložité. Pri používaní môže byť výstupom akýkoľvek vysokorozmerný objem. Keď ToString() použil NDArray metódu NumSharp, všimol som si, aký jednoduchý a krásny sa algoritmus stal systematickým a rekurzívnym rozdelením ND zväzkov na (N-1)D objemy a podobne.

Tento prístup "rozdel-and-panuj" vracia nízkorozmerné podobjemy tým, že rozdeľuje symboly rozsahu pomocou indexových symbolov NumSharpu.

Symbol rozsahu vs. symbol indexu

Symbol rozsahu ["start:stop:step"] vám umožňuje pristupovať k podrozsahu daného objemu s rovnakým rozmerom. Takže aj keď vyrežete len jeden stĺpec 2D matice, stále dostanete 2D maticu s iba jedným stĺpcom. Tu je krátky kúsok C# kódu, ktorý to demonštruje:



Rozrežte stĺpec pomocou symbolu rozsahu

Indexový symbol vám dáva (N-1) dimenzionálny výsek na určenom mieste N-rozmerného rodičovského objemu. Takže vyrezaním stĺpca z 2D matice pomocou indexových symbolov dostanete 1D vektor:


Slice stĺpce pomocou indexových symbolov

Ak ste rozdiel nevideli na prvý pohľad, tu sú dve vyššie uvedené definície rezov vedľa seba, ange[":,2"] vs index[":,2"], ktoré majú veľký vplyv na výsledky. Úplný odkaz na nový symbol rezu nájdete na wiki NumSharp.


Poznámka: <T>ArraySlice

Pri implementácii rezania N-rozmerných pohľadov som dospel k záveru, že by to mohlo byť zaujímavé aj pre mnohé iné oblasti .NET, a tak som to rozdelil do vlastnej samostatnej knižnice s názvom SliceAndDice. Funguje ako ľahký obal na indexovanie akejkoľvek C# dátovej štruktúry (napríklad or) ArraySlice <T>a umožňuje používať rovnaké mechanizmy premodelovania, rezania a zobrazovania bez všetkých ostatných náročných číselných výpočtov. Na dosiahnutie vynikajúcich schopností rezania stačí len niekoľko stoviek riadkov kódu! T[]IList<T>


Wraparound

NumSharp nedávno dostal rovnaký mechanizmus rezania a prezerania, čo nepochybne robí z NumPy jednu z najdôležitejších knižníc v ekosystéme strojového učenia Pythonu. SciSharp STACK je open source organizácia malého počtu skúsených vývojárov, ktorí tvrdo pracovali na tom, aby rovnakú funkcionalitu priniesli do sveta .NET. Najnovšie vylepšenia NumSharp sú dôležitým základom pri dosahovaní tohto cieľa.


Originál:Prihlásenie na hypertextový odkaz je viditeľné.




Predchádzajúci:Git lfs Large File Versioning Control
Budúci:Rocky Linux 9 wake on LAN
 Prenajímateľ| Zverejnené 10.1.2025 o 12:18:43 |
NumSharp je vhodný pre rôzne situácie, vrátane vzdelávacieho výskumu, finančnej analýzy, spracovania obrazu, hlbokého učenia a ďalších.

NumSharp, ako súčasť SciSharp.org, bol integrovaný do širokého spektra NET vedecký výpočtový ekosystém. Tu sú niektoré súvisiace a veľmi doplnkové položky, ktoré by ste mali ďalej preskúmať:

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

Na záver, NumSharp nie je len samostatná výkonná knižnica, ale spojenie. Kľúčový uzol v komunite vedeckých výpočtov .NET.

Adresa projektu NumSharp:https://github.com/SciSharp/NumSharp
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com