See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 1906|Vastuse: 1

[Nõuanded] [Tõlge]. NumSharp massiivi lõikamise funktsioon NET/C#-s

[Kopeeri link]
Postitatud 2025-1-10 12:17:13 | | | |

Tänu NumSharpi suurepärastele uutele massiivi lõikamise võimalustele on .NET kogukond sammu võrra lähemal võimsale avatud lähtekoodiga masinõppe platvormile.

Python on masinõppe keel osaliselt seetõttu, et seal on suurepärased teegid nagu NumPy ja TensorFlow. Kuid C# arendajatel on suur vajadus võimsate avatud lähtekoodiga teekide järele masinõppe ja andmeteaduse jaoks. NumSharp, SciSharp STACK organisatsiooni NumPy C# port, on hiljuti astunud suure sammu edasi, rakendades täielikult lõikamisvõimalusi, võimaldades luua suvalisi alamhulki N-mõõtmelistest massiividest kui tõhusaid toorandmete vaateid. See teeb sellest kasuliku tööriista C# kasutamiseks masinõppes koos TensorFlow.NET-ga.


Mis selles siis nii erilist on?

Kui sa pole NumPy-d kasutanud, siis sa ilmselt ei tea, kui hea lõikamine on. Python massiivid võimaldavad tagastada massiivi viilu, indekseerides hulga elemente järgmiselt: a[start:stop:step]. Kuid ainult NumPy keeruka massiivi rakendusega muutub lõikamine tõeliselt võimsaks andmetöötluse tehnikaks, ilma milleta masinõpe või andmeteadus oleks mõeldamatu.

Õnneks neile, kes ei saa või ei taha masinõppe jaoks Pythonile üle minna (mida mina samuti tegin), toob NumSharp selle võimaluse .NET maailma. NumSharpi arendajana tutvustasin teile olulisi lõikamise kasutusjuhtumeid, kasutades näidiskoodilõike C#-is. Pane tähele, et indekseerimist ei saa teha C#-s samamoodi nagu Pythonis, kuna keelesüntaksis on erinevusi. Kuid otsustasime jätta Python'i süntaksi lõikude definitsioonide jaoks, nii et kasutasime stringe viilude indekseerimiseks C#-s. Vaata seda näidet, et näha, kui lähedal on NumSharp NumPy-le.




Lõika veergu maatriksist välja Python/NumPy

Kui kirjutada C#-s koos NumSharpiga, on kood peaaegu identne. Pane tähele, et viile indekseeritakse veidi erinevalt, kasutades indekseerija parameetritena stringe.




Lõika veerud välja maatriksist C#/NumSharpis

Nagu näha, on NumSharpi meeskond panustanud palju selle loomisele, et muuta kood võimalikult sarnaseks Pythonile. See on väga oluline, sest nii saab olemasolevat Python'i koodi, mis tugineb NumPy-le, nüüd hõlpsasti C#-le portida.


Kasutusjuhtum: Kasuta sama andme mitut vaadet



Võimalus edastada ainult kohalikke andmeid (st väikesed suured pilditükid) funktsioonidesse ja välja ilma kopeerimiseta on käitusaegse jõudluse seisukohalt kriitiline, eriti suurte andmekogumite puhul. Lõigud indekseeritakse kohalike koordinaatide abil, nii et algoritm ei pea teadma andmete globaalset struktuuri, mis lihtsustab teie elu ja tagab maksimaalse jõudluse, sest välditakse tarbetut dubleerimist.


Kasutusjuhtumid: Hõredad vaated ja rekursiivne lõikamine



Massiivi hõreda vaate saab luua, määrates sammud viiluvahemiku algusest ja lõpust kaugemale. Nii palju kui mina tean, ei suuda isegi C# 8.0 uue massiivi viilusüntaksiga seda teha. See omadus muutub väga oluliseks vahelduvate andmete puhul. Saad oma algoritmi kujundada pidevate andmete töötlemiseks ja pakkuda sellele hõredaid viilu, mis jäljendavad pidevaid andmeallikaid, minimeerides algoritmi keerukust.


Lõikamist saab veelgi kaugemale lõigata, mis on väga oluline omadus, kui tegemist on kõrge dimensiooniga andmetega. See aitab ka algoritmi keerukust vähendada, kuna andmete dimensioonilisust saab vähendada rekursiivse lõikamisega.


Kasutusjuhtum: Tõhus töötle kõrgdimensionaalseid andmeid



Kui pead mõtlema andmemassiivi kui mahtu ja töötama selle osadega ilma uskumatuid koordinaatide teisenduse arvutusi, siis .reshape() on sinu sõber.
Kõik massiivid, mis on loodud või lõikavad operatsioonid, on .reshape() lihtsalt algandmete vaade. Kui sa iteratsioonid, loed või kirjutad elemente vaatesse, pääsed ligi toorandmete massiivile. NumSharp teeb läbipaistvalt sobivad indeksi teisendused, nii et saad indekseerida lõike suhteliste koordinaatidega.


Kasutusjuhtum: Elementide järjekorra pööramine ilma lisakuludeta

Negatiivsete sammudega viilud pööravad tegelikult viilude järjekorda vastupidiseks. Selle eeliseks on see, et selleks ei pea andmeid kopeerima ega loendama, nagu IEnumerable.Reverse(). Erinevus seisneb selles, et vaade (operatsiooni a["::-1"]) tulemus kuvab andmed vastupidises järjekorras ja saad indekseerida selle ümberpööratud jada ilma seda loetlemata.


Kasutusjuhtum: Keerukuse vähendamine mõõtmete vähendamisega

Töötades kõrge dimensiooniga andmetega, võivad algoritmid muutuda väga keeruliseks. Kasutuses võib väljundiks olla mistahes kõrge mõõtmelise mahtu. Kui ToString() kasutas NumSharp meetodit NDArray, märkasin, kui lihtne ja kaunis algoritm on muutunud, lõigates ND-ruumalad süsteemselt ja rekursiivselt (N-1)D ruumaladeks jne.

See jaga-ja-valitse lähenemine tagastab madala dimensiooniga alammahtu, lõigates vahemikusümboleid NumSharpi indeksisümbolite abil.

Vahemikusümbol vs. indeksisümbol

Vahemiku sümbol ["start:stop:step"] võimaldab sul pääseda ligipääsu sama mahu alamvahemikule. Nii et isegi kui lõikad välja ainult ühe veeru 2D maatriksist, saad ikkagi 2D maatriksi ainult ühe veeruga. Siin on lühike C# koodi, mis seda demonstreerib:



Lõika veerg vahemikussümboliga

Indeksisümbol annab (N-1) mõõtmelise lõigu määratud N-mõõtmelise vanemruumala asukohas. Nii et veeru lõikamine 2D maatriksist indeksisümbolite abil annab sulle 1D vektori:


Veergude lõikamine indekssümbolite abil

Kui sa pole vahet esmapilgul näinud, siis siin on kaks ülaltoodud viilu definitsiooni kõrvuti, ange[":,2:3"] vs indeks[":,2"], mis mõjutavad tulemusi tugevalt. Täieliku viite uuele viilusümbolile on leitav NumSharpi vikist.


Märkus: <T>ArraySlice

N-mõõtmeliste vaadete lõikamise rakendamisel jõudsin järeldusele, et see võiks olla huvitav paljude teiste .NET valdkondade jaoks, seega jagasin selle omaenda iseseisvaks teegiks nimega SliceAndDice. See võimaldab olla kerge ümbris, mis võimaldab indekseerida mis tahes C# andmestruktuuri (näiteks ArraySlice<T>) ning võimaldab kasutada samu ümberkujundamise, lõikamise ja vaatamise mehhanisme ilma kõigi teiste raskete numbriliste arvutusteta. Piisab vaid mõnesaja koodirea võrra, et saavutada suurepärased lõikamisvõimalused! T[]IList<T>


ümbritsev ümbrus

NumSharpile on hiljuti antud sama lõikamis- ja vaatamismehhanism, mis teeb NumPyst kahtlemata ühe olulisema teegi Python'i masinõppe ökosüsteemis. SciSharp STACK on avatud lähtekoodiga organisatsioon, kuhu kuulub väike hulk oskuslikke arendajaid, kes on väga palju vaeva näinud, et tuua sama funktsionaalsus .NET maailma. NumSharpi viimased täiustused on selle saavutamisel oluline nurgakivi.


Originaal:Hüperlingi sisselogimine on nähtav.




Eelmine:Git lfs suur failiversioonide haldus
Järgmine:Rocky Linux 9 wake LAN-il
 Üürileandja| Postitatud 2025-1-10 12:18:43 |
NumSharp sobib erinevateks olukordadeks, sealhulgas haridusuuringuteks, finantsanalüüsiks, pilditöötluseks, süvaõppeks ja muuks.

NumSharp on osana SciSharp.org integreeritud laia valikusse NET teaduslik arvutusökosüsteem. Siin on mõned seotud ja väga täiendavad esemed, mida soovitatakse edasi uurida:

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

Kokkuvõtteks ei ole NumSharp mitte ainult iseseisev võimas raamatukogu, vaid ka ühendus. Oluline sõlmpunkt .NET teadusliku arvutuse kogukonnas.

NumSharpi projekti aadress:https://github.com/SciSharp/NumSharp
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com