Duomenų mokslas

„Python“ vektoriai, matricos ir masyvai su „NumPy“

„Python“ vektoriai, matricos ir masyvai su „NumPy“
Šioje pamokoje apžvelgsime keletą tvarkingų patarimų, kaip žaisti su vektoriais, matricomis ir masyvais, naudojant „PyPthon“ biblioteką „NumPy“. Ši pamoka yra labai geras atspirties taškas, jei pradedate naudotis „Data Science“ ir jums reikia šiek tiek įvadinės matematinės šių komponentų apžvalgos ir kaip mes galime žaisti su jais naudodami „NumPy“ kodą.

„NumPy“ biblioteka leidžia mums atlikti įvairias operacijas, kurias reikia atlikti su duomenų struktūromis, dažnai naudojamomis mašininio mokymosi ir duomenų moksle, pvz., Vektoriais, matricomis ir masyvais. Mes parodysime tik labiausiai paplitusias operacijas su „NumPy“, kurios naudojamos daugelyje „Machine Learning“ vamzdynų. Galiausiai, atkreipkite dėmesį, kad „NumPy“ yra tik būdas atlikti operacijas, todėl matomos matematinės operacijos yra pagrindinis šios pamokos akcentas, o ne pats „NumPy“ paketas. Pradėkime.

Kas yra vektorius?

Pasak „Google“, vektorius yra dydis, turintis kryptį ir dydį, ypač nustatantis vieno taško padėtį erdvėje kito atžvilgiu.

Vektoriai yra labai svarbūs mašininiame mokymesi, nes jie ne tik apibūdina funkcijų dydį, bet ir jų kryptį. „NumPy“ galime sukurti vektorių naudodami šį kodo fragmentą:

importuoti numerį kaip np
eilutės_vektorius = np.masyvas ([1,2,3])
spausdinti (row_vector)

Pirmiau pateiktame kodo fragmente sukūrėme eilutės vektorių. Mes taip pat galime sukurti stulpelių vektorių kaip:

importuoti numerį kaip np
col_vector = np.masyvas ([[1], [2], [3]])
spausdinti (col_vector)

Matricos kūrimas

Matricą galima paprasčiausiai suprasti kaip dvimatę masyvą. Matricą galime sukurti naudodami „NumPy“, sudarydami daugialypį masyvą:

matrica = np.masyvas ([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
spausdinti (matrica)

Nors matrica yra visiškai panaši į daugiamatę masyvą, matricos duomenų struktūra nerekomenduojama dėl dviejų priežasčių:

  1. Masyvas yra standartas, kai kalbama apie „NumPy“ paketą
  2. Dauguma operacijų su „NumPy“ pateikia matricas, o ne matricą

Naudojant retą matricą

Norėčiau priminti, kad reta matrica yra ta, kurioje dauguma elementų yra lygūs nuliui. Dabar dažnas duomenų apdorojimo ir mašininio mokymosi scenarijus yra matricų, kuriose dauguma elementų yra lygūs nuliui, apdorojimas. Pavyzdžiui, apsvarstykite matricą, kurios eilutės apibūdina kiekvieną „YouTube“ vaizdo įrašą, o stulpeliai atspindi kiekvieną registruotą vartotoją. Kiekviena vertė nurodo, ar vartotojas žiūrėjo vaizdo įrašą, ar ne. Žinoma, dauguma šios matricos reikšmių bus lygios nuliui. The pranašumas su reta matrica yra tai, kad jis nesaugo nulinės vertės. Tai taip pat suteikia didžiulį skaičiavimo pranašumą ir saugyklos optimizavimą.

Sukurkime kibirkščių matricą čia:

nuo nenuobodaus importo negausus
original_matrica = np.masyvas ([[1, 0, 3], [0, 0, 6], [7, 0, 0]])
reta_matrica = negausi.csr_matrix (original_matrix)
spausdinti (sparse_matrix)

Norėdami suprasti, kaip veikia kodas, apžvelgsime išvestį čia:

Pirmiau pateiktame kode mes naudojome „NumPy“ funkciją, kad sukurtume Suspausta reta eilė matrica, kurioje nulio elementai vaizduojami naudojant nulinius indeksus. Yra įvairių rūšių retų matricų, tokių kaip:

Čia mes nardysime į kitas retas matricas, bet žinome, kad kiekviena jų yra specifinė ir niekas negali būti vadinamas „geriausiu“.

Operacijų taikymas visiems vektoriaus elementams

Tai yra įprastas scenarijus, kai turime taikyti bendrą operaciją keliems vektoriniams elementams. Tai galima padaryti apibrėžiant lambda ir tada vektorizuojant tą patį. Pažiūrėkime keletą to paties kodo fragmentų:

matrica = np.masyvas ([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
mul_5 = lambda x: x * 5
vectorized_mul_5 = np.vektorizuoti (mul_5)
vectorized_mul_5 (matrica)

Norėdami suprasti, kaip veikia kodas, apžvelgsime išvestį čia:

Pirmiau pateiktame kodo fragmente mes panaudojome vektorizavimo funkciją, kuri yra „NumPy“ bibliotekos dalis, kad paprastą lambda apibrėžimą paverstume funkcija, galinčia apdoroti kiekvieną vektoriaus elementą. Svarbu pažymėti, kad vektorizavimas yra tik kilpa per elementus ir tai neturi jokios įtakos programos vykdymui. NumPy taip pat leidžia transliacija, o tai reiškia, kad vietoj minėto sudėtingo kodo mes galėjome tiesiog padaryti:

matrica * 5

O rezultatas būtų buvęs lygiai toks pats. Pirmiausia norėjau parodyti sudėtingą dalį, kitaip jūs būtumėte praleidę skyrių!

Vidurkis, dispersija ir standartinis nuokrypis

Naudojant „NumPy“, lengva atlikti operacijas, susijusias su aprašomąja vektorių statistika. Vektoriaus vidurkį galima apskaičiuoti taip:

np.vidurkis (matrica)

Vektoriaus dispersiją galima apskaičiuoti taip:

np.var (matrica)

Standartinį vektoriaus nuokrypį galima apskaičiuoti taip:

np.standartinis (matrica)

Aukščiau nurodytų komandų išvestis duotoje matricoje pateikiama čia:

Matricos perkėlimas

Perkėlimas yra labai dažna operacija, apie kurią išgirsite visada, kai jus supa matricos. Perkėlimas yra tik būdas pakeisti matricos stulpelių ir eilučių reikšmes. Atkreipkite dėmesį, kad a vektoriaus negalima perkelti kaip vektorius yra tik reikšmių rinkinys be tų verčių skirstymo į eilutes ir stulpelius. Atkreipkite dėmesį, kad eilutės vektoriaus pavertimas stulpelio vektoriu nėra perkėlimas (remiantis linijinės algebros apibrėžimais, kurie nepatenka į šios pamokos taikymo sritį).

Kol kas ramybę rasime tiesiog permesdami matricą. Labai paprasta pasiekti matricos perkėlimą naudojant „NumPy“:

matrica.T

Aukščiau nurodytos komandos išvestis duotoje matricoje pateikiama čia:

Tą pačią operaciją galima atlikti eilutės vektoriuje, norint konvertuoti jį į stulpelio vektorių.

Matricos išlyginimas

Matricą galime paversti vienos dimensijos masyvu, jei norime jos elementus apdoroti linijiniu būdu. Tai galima padaryti naudojant šį kodo fragmentą:

matrica.išlyginti ()

Minėtos komandos išvestis duotoje matricoje pateikiama čia:

Atkreipkite dėmesį, kad išlyginta matrica yra vienos dimensijos masyvas, tiesiog linijinis.

Atskirų verčių ir savitųjų vektorių skaičiavimas

Savieji vektoriai labai dažnai naudojami mašininio mokymosi paketuose. Taigi, kai linijinės transformacijos funkcija pateikiama kaip matrica, tada X, savieji vektoriai yra vektoriai, kurie keičiasi tik vektoriaus mastu, bet ne jo kryptimi. Galime pasakyti, kad:

Xv = γv

Čia X yra kvadratinė matrica, o γ yra savosios vertės. Be to, v yra savieji vektoriai. Naudojant „NumPy“, lengva apskaičiuoti savąsias reikšmes ir vektorius. Štai kodo fragmentas, kuriame mes demonstruojame tą patį:

evalues, evectors = np.linalg.eig (matrica)

Aukščiau nurodytos komandos išvestis duotoje matricoje pateikiama čia:

Taškiniai vektorių gaminiai

Taškiniai vektorių produktai yra būdas padauginti 2 vektorius. Tai jums pasakoja apie kiek vektorių yra ta pačia kryptimi, priešingai nei kryžminis produktas, kuris jums sako priešingai, kiek mažai vektorių yra ta pačia kryptimi (vadinama stačiakampiu). Dviejų vektorių taškų sandaugą galime apskaičiuoti taip, kaip nurodyta kodo fragmente:

a = np.masyvas ([3, 5, 6])
b = np.masyvas ([23, 15, 1])
np.taškas (a, b)

Aukščiau nurodytos komandos išvestis duotuose masyvuose pateikiama čia:

Matricų susiejimas, atimimas ir dauginimas

Kelių matricų pridėjimas ir atėmimas yra gana paprastas matricų veiksmas. Tai galima padaryti dviem būdais. Pažvelkime į kodo fragmentą, kad atliktume šias operacijas. Kad tai būtų paprasta, tą pačią matricą naudosime du kartus:

np.pridėti (matrica, matrica)

Tada dvi matricas galima atimti kaip:

np.atimti (matrica, matrica)

Aukščiau nurodytos komandos išvestis duotoje matricoje pateikiama čia:

Kaip ir reikėjo tikėtis, kiekvienas iš matricos elementų pridedamas / atimamas su atitinkamu elementu. Matricos padauginimas yra panašus į taškinio produkto paiešką, kaip tai darėme anksčiau:

np.taškas (matrica, matrica)

Aukščiau pateiktas kodas suras tikrąją dviejų matricų daugybos vertę, pateiktą kaip:

matrica * matrica

Aukščiau nurodytos komandos išvestis duotoje matricoje pateikiama čia:

Išvada

Šioje pamokoje patyrėme daug matematinių operacijų, susijusių su vektoriais, matricomis ir masyvais, kurie dažniausiai naudojami Duomenų apdorojimas, aprašomoji statistika ir duomenų mokslas. Tai buvo greita pamoka, apėmusi tik pačius dažniausiai pasitaikančius ir svarbiausius įvairių sąvokų skyrius, tačiau šios operacijos turėtų labai gerai suprasti, ką visas operacijas galima atlikti tvarkant šias duomenų struktūras.

Prašau laisvai pasidalinti savo atsiliepimais apie pamoką „Twitter“ su @linuxhint ir @sbmaggarwal (tai aš!).

„OpenTTD“ pamoka
„OpenTTD“ yra vienas iš populiariausių verslo modeliavimo žaidimų. Šiame žaidime turite sukurti nuostabų transporto verslą. Tačiau pradėsite nuo mažda...
„SuperTuxKart“, skirta „Linux“
„SuperTuxKart“ yra puikus pavadinimas, sukurtas nemokamai suteikti „Mario Kart“ patirtį jūsų „Linux“ sistemoje. Tai gana sudėtinga ir smagu žaisti, yr...
„Battle for Wesnoth“ pamoka
„Battle for Wesnoth“ yra vienas populiariausių atvirojo kodo strateginių žaidimų, kurį šiuo metu galite žaisti. Šis žaidimas ne tik buvo kuriamas laba...