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

Python Vectors Matrices



Šioje pamokoje apžvelgsime keletą tvarkingų patarimų ir gudrybių, kaip žaisti su vektoriais, matricomis ir masyvais naudojant „NumPy“ biblioteką „Python“. Ši pamoka yra labai geras atspirties taškas, jei pradedate dirbti su duomenų mokslu ir jums reikia įvadinės matematinės šių komponentų apžvalgos ir kaip galime žaisti su jais naudojant kodą „NumPy“.

„NumPy“ biblioteka leidžia mums atlikti įvairias operacijas, kurias reikia atlikti su duomenų struktūromis, dažnai naudojamomis mašinų mokymuisi ir duomenų mokslui, pvz., Vektoriams, matricoms ir masyvams. Mes parodysime tik dažniausiai pasitaikančias operacijas su „NumPy“, kurios naudojamos daugelyje mašinų mokymosi vamzdynų. Galiausiai atkreipkite dėmesį, kad „NumPy“ yra tik būdas atlikti operacijas, todėl mūsų parodytos matematinės operacijos yra pagrindinis šios pamokos akcentas, o ne pats „NumPy“ paketas. Pradėkime.





Kas yra Vektorius?

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





Vektoriai yra labai svarbūs mašininiam mokymuisi, nes jie ne tik apibūdina funkcijų dydį, bet ir kryptį. „NumPy“ galime sukurti vektorių su šiuo kodo fragmentu:





importuoti numpykaippvz

eilutės_vektorius = np.masyvas([1,2,3])
spausdinti(eilutės_vektorius)

Aukščiau pateiktame kodo fragmente sukūrėme eilutės vektorių. Taip pat galime sukurti stulpelio vektorių kaip:

importuoti numpykaippvz

col_vector = np.masyvas([[1],[2],[3]])
spausdinti(col_vector)

Matricos kūrimas

Matricą galima tiesiog suprasti kaip dvimatį masyvą. Mes galime sukurti matricą naudodami „NumPy“, sukurdami daugiamatį masyvą:



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

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

  1. Masyvas yra standartas, kai kalbama apie „NumPy“ paketą
  2. Dauguma operacijų su „NumPy“ grąžina masyvus, o ne matricą

Naudojant retą matricą

Primename, kad reta matrica yra ta, kurioje dauguma elementų yra nulis. Dabar bendras duomenų apdorojimo ir mašininio mokymosi scenarijus yra matricų apdorojimas, kuriame dauguma elementų yra nulis. Pavyzdžiui, apsvarstykite matricą, kurios eilutės apibūdina kiekvieną „YouTube“ vaizdo įrašą, o stulpeliai - kiekvieną registruotą vartotoją. Kiekviena vertė nurodo, ar vartotojas žiūrėjo vaizdo įrašą, ar ne. Žinoma, dauguma šios matricos verčių bus lygios nuliui. The pranašumas naudojant retą matricą kad nesaugo nulio reikšmių. Tai suteikia didžiulį skaičiavimo pranašumą ir optimizuoja saugojimą.

Sukurkime kibirkšties matricą čia:

iš skrebių importo retai

originali_matrica = np.masyvas([[1,0,3],[0,0,6],[7,0,0]])
retas_matrica = retas.csr_matrica(originali_matrica)
spausdinti(retas_matrica)

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

Aukščiau pateiktame kode mes sukūrėme „NumPy“ funkciją Suspausta reta eilė matrica, kurioje ne nuliniai elementai vaizduojami naudojant nuliu pagrįstus indeksus. Yra įvairių rūšių retų matricų, tokių kaip:

  • Suspausta reta kolonėlė
  • Sąrašų sąrašas
  • Raktų žodynas

Čia nesigilinsime į kitas retas matricas, bet žinome, kad kiekvienos jų paskirtis yra specifinė ir niekas negali būti įvardijamas kaip „geriausias“.

Operacijų taikymas visiems vektoriniams elementams

Tai įprastas scenarijus, kai turime taikyti bendrą operaciją keliems vektoriniams elementams. Tai galima padaryti apibrėžiant lambda ir tada vektorizuojant tą patį. Pažvelkime į tam tikrą kodo fragmentą:

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

mul_5 = lambda x: x* 5
vectorized_mul_5 = np.vectorize(mul_5)

vectorized_mul_5(matrica)

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

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

matrica* 5

Ir rezultatas būtų visiškai toks pat. Aš pirmiausia norėjau parodyti sudėtingą dalį, kitaip jūs būtumėte praleidę skyrių!

Vidutinis, dispersija ir standartinis nuokrypis

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

np.reiškia(matrica)

Vektoriaus dispersiją galima apskaičiuoti taip:

np.var(matrica)

Standartinį vektoriaus nuokrypį galima apskaičiuoti taip:

pvz., std(matrica)

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

Matricos perkėlimas

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

Kol kas ramybę rasime tik perkeldami matricą. Prieiga prie matricos perkėlimo naudojant „NumPy“ yra labai paprasta:

matrica.T

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

Tą pačią operaciją galima atlikti ir eilutės vektoriui, kad jis būtų paverstas stulpelio vektoriumi.

Matricos išlyginimas

Mes galime konvertuoti matricą į vienmatį masyvą, jei norime jos elementus apdoroti linijiniu būdu. Tai galima padaryti naudojant šį kodo fragmentą:

matrica.plakti()

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

Atkreipkite dėmesį, kad išlyginamoji matrica yra vienmatis masyvas, tiesiog linijinis.

Eigeninių verčių ir eigenvektorių skaičiavimas

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

Xv = γv

Čia X yra kvadratinė matrica, o γ yra Eigenvalues. Be to, v yra ašiniai vektoriai. Naudojant „NumPy“, nesunku apskaičiuoti Eigenvalues ​​ir Eigenvectors. Čia yra kodo fragmentas, kuriame parodome tą patį:

vertybės, evektoriai = np.linalg.eig(matrica)

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

Vektoriniai taškiniai produktai

Vektorių taškiniai 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 (vadinami stačiakampiais). Mes galime apskaičiuoti dviejų vektorių taškų sandaugą, kaip nurodyta kodo fragmente:

a = np. masyvas([3,5,6])
b = np. masyvas([2. 3,penkiolika,1])

np.taškas(a, b)

Aukščiau pateiktos komandos išvestis tam tikruose masyvuose pateikiama čia:

Matricų pridėjimas, atėmimas ir dauginimas

Kelių matricų pridėjimas ir atėmimas yra gana paprasta operacija matricose. Yra du būdai, kaip tai padaryti. Pažvelkime į kodo fragmentą, kaip atlikti šias operacijas. Kad tai būtų paprasta, tą pačią matricą naudosime du kartus:

np.pridėti(matrica, matrica)

Tada dvi matricas galima atimti taip:

np. atimti(matrica, matrica)

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

Kaip ir tikėtasi, kiekvienas matricos elementas pridedamas/atimamas su atitinkamu elementu. Matricos dauginimas yra panašus į taškinio produkto radimą, kaip tai darėme anksčiau:

np.taškas(matrica, matrica)

Pirmiau pateiktas kodas suras tikrąją dviejų matricų dauginimo vertę, pateiktą kaip:

matrica*matrica

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

Išvada

Šioje pamokoje mes atlikome daugybę matematinių operacijų, susijusių su vektoriais, matricomis ir masyvais, kurie dažniausiai naudojami Duomenų apdorojimas, aprašomoji statistika ir duomenų mokslas. Tai buvo greita pamoka, apimanti tik dažniausiai pasitaikančius ir svarbiausius įvairių sąvokų skyrius, tačiau šios operacijos turėtų labai gerai suprasti, ką galima atlikti atliekant šias duomenų struktūras.

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