Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 1906|Vastaus: 1

[Vinkkejä] [Käännös]. NumSharp-taulukon viipalointifunktio NET/C#:ssa

[Kopioi linkki]
Julkaistu 2025-1-10 klo 12:17:13 | | | |

NumSharpin loistavien uusien taulukoiden viipalointiominaisuuksien ansiosta .NET-yhteisö on askeleen lähempänä tehokasta avoimen lähdekoodin koneoppimisalustaa.

Python on koneoppimiskieli osittain siksi, että sillä on erinomaiset kirjastot kuten NumPy ja TensorFlow. C#-kehittäjillä on kuitenkin suuri tarve tehokkaille avoimen lähdekoodin kirjastoille koneoppimista ja data-analytiikkaa varten. NumSharp, SciSharp STACK -organisaation NumPy C# -porttaus, on äskettäin ottanut suuren askeleen eteenpäin ottamalla täysin käyttöön viipalointiominaisuudet, mikä mahdollistaa mielivaltaisten N-ulotteiden osajoukkojen luomisen tehokkaina raakadatan näkyminä. Tämä tekee siitä hyödyllisen työkalun C#:n käyttämiseen koneoppimiseen yhdessä TensorFlow.NET:n kanssa.


Mikä siinä on niin iso juttu?

Jos et ole käyttänyt NumPyä, et todennäköisesti tiedä, kuinka hyvä viipalointi on. Python-taulukot mahdollistavat taulukon viipaleen palauttamisen indeksoimalla sarjan elementtejä seuraavasti: a[start:stop:step]. Mutta vasta NumPy:n monimutkaisen taulukon toteutuksen myötä viipalointi muuttuu todella tehokkaaksi datan käsittelytekniikaksi, ilman jota koneoppiminen tai datatiede olisivat käsittämättömiä.

Onneksi niille, jotka eivät voi tai halua siirtyä Pythoniin koneoppimista varten (jonka minäkin tein), NumSharp tuo tämän ominaisuuden .NET-maailmaan. Yhtenä NumSharpin kehittäjistä olen esitellyt sinulle tärkeitä leikkauskäyttötapauksia, joissa on esimerkkikoodipätkiä C#:ssa. Huomaa, että indeksointia ei voi tehdä C#:lla samalla tavalla kuin Pythonissa kielisyntaksin erojen vuoksi. Päätimme kuitenkin säilyttää Python-syntaksin viipaleiden määrittelyissä, joten käytimme merkkijonoja viipaleiden indeksointiin C#:ssa. Katso tämä esimerkki nähdäksesi, kuinka lähellä NumSharp on NumPyä.




Leikkaa sarake pois matriisista Python/NumPy:ssä

Kun koodi kirjoitetaan C#:lla NumSharpilla, koodi on lähes identtinen. Huomaa, että viipaleet indeksoidaan hieman eri tavalla käyttämällä merkkijonoja indeksaattorin parametreina.




Leikkaa sarakkeet pois matriisista C#/NumSharpissa

Kuten näet, NumSharpin tiimi on panostanut paljon siihen, että koodi olisi mahdollisimman samankaltainen kuin Python. Tämä on erittäin tärkeää, koska näin olemassa oleva Python-koodi, joka perustuu NumPyyn, voidaan nyt helposti siirtää C#:lle.


Käyttötapaus: Käytä useita näkymiä samasta datasta



Kyky välittää vain paikallisia osia taustalla olevasta datasta (eli pienet suuret kuvalohkot) funktioihin ilman kopiointia on ratkaisevan tärkeää suorituskyvyn kannalta, erityisesti suurissa tietoaineistoissa. Viipaleet indeksoidaan paikallisten koordinaattien avulla, joten algoritmisi ei tarvitse tietää datan globaalia rakennetta, mikä yksinkertaistaa elämääsi ja varmistaa maksimaalisen suorituskyvyn, koska tarpeeton päällekkäisyys vältetään.


Käyttötapaukset: Harvat näkymät ja rekursiivinen viipalointi



Niukan näkymän taulukosta voidaan luoda määrittämällä askelia leikkausalueen alun ja lopun ulkopuolelle. Käsittääkseni edes C# 8.0 uudella taulukon viipalesyntaksilla ei pysty tähän. Tämä ominaisuus on erittäin tärkeä interleaved-datan käsittelyssä. Voit suunnitella algoritmisi käsittelemään jatkuvaa dataa ja tarjota sille harvoja viipaleita, jotka jäljittelevät jatkuvia tietolähteitä, mikä minimoi algoritmisi monimutkaisuuden.


Viipalointia voi viipaloida pidemmälle, mikä on erittäin tärkeä ominaisuus, jos käsittelet korkean ulottuvuuden dataa. Tämä auttaa myös vähentämään algoritmin monimutkaisuutta, sillä datan ulottuvuutta voi pienentää rekursiivisella viipalointilla.


Käyttötapaus: Prosessoida tehokkaasti korkean ulottuvuuden dataa



Jos sinun täytyy ajatella datataulukkoa tilavuutena ja työskennellä sen osien kanssa ilman, että sinun tarvitsee tehdä uskomattomia koordinaattimuunnoslaskelmia, niin .reshape() on ystäväsi.
Kaikki taulukot, jotka on luotu tai jotka on luotu leikkausoperaatioilla, ovat .reshape() vain alkuperäisen datan näkymä. Kun iteroidaan, luet tai kirjoitat elementtejä näkymään, pääset käsiksi raakadatataulukkoon. NumSharp suorittaa läpinäkyvästi sopivat indeksimuunnokset, jotta voit indeksoida viipaleita suhteellisilla koordinaateilla.


Käyttötapaus: Kääntää elementtien järjestys ilman lisäkustannuksia

Viipaleet, joissa käytetään negatiivisia askelia, kääntävät viipaleiden järjestyksen itse asiassa päinvastaiseksi. Sen etuna on, ettei dataa tarvitse kopioida tai luetella tähän, aivan kuten IEnumerable.Reverse(). Ero on siinä, että näkymä (operaation a["::-1"]) näyttää datan käänteisessä järjestyksessä, ja voit indeksoida kyseisen käänteisen sekvenssin ilman sen luettelemista.


Käyttötapaus: Vähennä monimutkaisuutta pienentämällä ulottuvuuksia

Kun työskennellään korkean ulottuvuuden datan kanssa, algoritmit voivat myös muuttua hyvin monimutkaisiksi. Käytössä voidaan tuottaa mikä tahansa korkean ulottuvuuden tilavuus. Kun ToString():n NumSharp-menetelmä NDArray, huomasin, kuinka yksinkertainen ja kaunis algoritmi on muuttunut järjestelmällisesti ja rekursiivisesti leikkaamalla ND-tilavuuksia (N-1)D-tilavuuksiksi jne.

Tämä jaka ja hallitse -menetelmä palauttaa matalan ulottuvuuden osatilavuuksia leikkaamalla etäisyyssymbolit NumSharpin indeksisymboleilla.

Etäisyyssymboli vs. indeksisymboli

Etäisyyssymboli ["start:stop:step"] antaa sinun käyttää tietyn tilavuuden alialuetta, jolla on sama ulottuvuus. Joten vaikka poistaisit vain yhden sarakkeen 2D-matriisista, saat silti 2D-matriisin, jossa on vain yksi sarakke. Tässä lyhyt pätkä C#-koodia, joka havainnollistaa tätä:



Leikkaa sarake etäisyyssymbolilla

Indeksisymboli antaa sinulle (N-1)-ulotteisen viipaleen N-ulotteisen vanhemman tilavuuden määritetyssä kohdassa. Joten kun leikkaat sarakkeen 2D-matriisista indeksisymboleilla, saat 1D-vektorin:


Viipalosarakkeet indeksisymboleilla

Jos et ole nähnyt eroa ensisilmäyksellä, tässä ovat kaksi yllä olevaa viipalemääritelmää rinnakkain, ange[":,2:3"] vs indeksi[":,2"], joilla on suuri vaikutus tuloksiin. Täydellinen viittaus uuteen viipalesymboliin löytyy NumSharp-wikistä.


Huomautus: <T>ArraySlice

Toteuttaessani N-ulottuvuuden näkymien viipalointia päädyin siihen, että se voisi olla kiinnostava monille muille .NET-alueille, joten jaoin sen omaan itsenäiseen kirjastooni nimeltä SliceAndDice. Siinä on kevyt kääre minkä tahansa C#-tietorakenteen (kuten ArraySlicen) <T>indeksointiin, ja se mahdollistaa samojen muokkaus-, viipalointi- ja katselumekanismien käytön ilman muita raskaita numeerisia laskelmia. Tarvitaan vain muutama sata koodiriviä saavuttaaksesi erinomaiset leikkausominaisuudet! T[]IList<T>


Wraparound

NumSharpille on äskettäin annettu sama viipalointi- ja katselumekanismi, mikä tekee NumPystä kiistatta yhden tärkeimmistä kirjastoista Pythonin koneoppimisen ekosysteemissä. SciSharp STACK on avoimen lähdekoodin organisaatio, johon kuuluu pieni joukko taitavia kehittäjiä, jotka ovat tehneet kovasti töitä tuodakseen saman toiminnallisuuden .NET-maailmaan. NumSharpin viimeisimmät parannukset ovat tärkeä kulmakivi tämän saavuttamisessa.


Alkuperäinen:Hyperlinkin kirjautuminen on näkyvissä.




Edellinen:Git lfs suuri tiedostoversioiden hallinta
Seuraava:Rocky Linux 9 -herätys LAN-verkossa
 Vuokraisäntä| Julkaistu 2025-1-10 klo 12:18:43 |
NumSharp soveltuu monenlaisiin tilanteisiin, kuten koulutustutkimukseen, talousanalyysiin, kuvankäsittelyyn, syväoppimiseen ja muuhun.

NumSharp on osana SciSharp.org integroitu laajaan valikoimaan NET:n tieteellinen laskentaekosysteemi. Tässä on joitakin aiheeseen liittyviä ja erittäin täydentäviä tuotteita, joita suositellaan tutkittavaksi lisää:

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

Yhteenvetona voidaan todeta, että NumSharp ei ole pelkästään itsenäinen tehokas kirjasto, vaan yhteys. Keskeinen solmu .NET-tieteellisen laskennan yhteisössä.

NumSharp-projektin osoite:https://github.com/SciSharp/NumSharp
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com