Python: vektorok, mátrixok és tömbök a NumPy segítségével

Python Vectors Matrices



Ebben a leckében megvizsgálunk néhány ügyes tippet és trükköt a vektorokkal, mátrixokkal és tömbökkel való játékhoz a Python NumPy könyvtárával. Ez a lecke nagyon jó kiindulópont, ha most kezdi el használni az adattudományt, és szüksége van néhány bevezető matematikai áttekintésre ezekről az összetevőkről, valamint arról, hogyan játszhatunk velük a NumPy kóddal.

A NumPy könyvtár lehetővé teszi számunkra, hogy különböző műveleteket végezzünk, amelyeket a gépi tanulásban és az adattudományban gyakran használt adatstruktúrákon kell elvégezni, például vektorok, mátrixok és tömbök. Csak a leggyakoribb műveleteket mutatjuk be a NumPy -vel, amelyeket sok gépi tanulási folyamatban használnak. Végezetül, kérjük, vegye figyelembe, hogy a NumPy csak egy módja a műveletek végrehajtásának, ezért a bemutatott matematikai műveletek képezik a lecke fő hangsúlyát, és nem maga a NumPy csomag. Lássunk neki.







Mi az a vektor?

A Google szerint a vektor olyan mennyiség, amelynek iránya és nagysága van, különösen, ha meghatározza a tér egyik pontjának helyzetét a másikhoz képest.





A vektorok nagyon fontosak a gépi tanulásban, mivel nemcsak a nagyságrendet írják le, hanem a szolgáltatások irányát is. Vektort hozhatunk létre a NumPy -ben a következő kódrészlettel:





import numpymintpéldául

sor_vektor = np.tömb([1,2,3])
nyomtatás(sor_vektor)

A fenti kódrészletben létrehoztunk egy sorvektorot. Létrehozhatunk oszlopvektorokat is:

import numpymintpéldául

col_vector = np. tömb([[1],[2],[3]])
nyomtatás(col_vector)

Mátrix készítése

A mátrix egyszerűen kétdimenziós tömbként értelmezhető. A NumPy segítségével mátrixot készíthetünk többdimenziós tömb létrehozásával:



mátrix = np.tömb([[1,2,3],[4,5,6],[7,8,9]])
nyomtatás(mátrix)

Bár a mátrix pontosan hasonló a többdimenziós tömbhöz, a mátrix adatszerkezet nem ajánlott két ok miatt:

  1. A tömb a szabvány, amikor a NumPy csomagról van szó
  2. A NumPy műveletek többsége tömböket ad vissza, és nem mátrixot

Ritka mátrix használata

Emlékeztetni kell arra, hogy ritka mátrix az, amelyben a tételek nagy része nulla. Most az adatfeldolgozás és a gépi tanulás gyakori forgatókönyve olyan mátrixok feldolgozása, amelyekben a legtöbb elem nulla. Vegyünk például egy mátrixot, amelynek sorai leírják a Youtube minden videóját, az oszlopok pedig minden regisztrált felhasználót. Minden érték azt jelzi, hogy a felhasználó nézett -e videót vagy sem. Természetesen a mátrix értékeinek többsége nulla lesz. Az ritka mátrix előnye hogy nem tárolja a nulla értékeket. Ez hatalmas számítási előnyt és tárhelyoptimalizálást eredményez.

Hozzon létre egy szikra mátrixot itt:

a scipy importból ritka

eredeti_mátrix = np.tömb([[1,0,3],[0,0,6],[7,0,0]])
ritka_mátrix = ritka.csr_mátrix(eredeti_mátrix)
nyomtatás(ritka_mátrix)

A kód működésének megértése érdekében itt megnézzük a kimenetet:

A fenti kódban a NumPy függvényét használtuk a Tömörített ritka sor mátrix, ahol a nullától eltérő elemeket a nulla alapú indexek segítségével ábrázolják. Különféle ritka mátrixok léteznek, például:

  • Tömörített ritka oszlop
  • Listák listája
  • Kulcsszótár

Itt nem fogunk más ritka mátrixokba merülni, de tudjuk, hogy mindegyikük felhasználása sajátos, és senkit nem lehet „legjobbnak” nevezni.

Műveletek alkalmazása minden vektor elemre

Gyakori forgatókönyv, amikor közös műveletet kell alkalmaznunk több vektor elemre. Ezt úgy tehetjük meg, hogy definiálunk egy lambdát, majd ugyanezt vektorizáljuk. Lássunk néhány kódrészletet ehhez:

mátrix = np.tömb([
[1,2,3],
[4,5,6],
[7,8,9]])

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

vektorizált_mul_5(mátrix)

A kód működésének megértése érdekében itt megnézzük a kimenetet:

A fenti kódrészletben a vektorizálási függvényt használtuk, amely a NumPy könyvtár része, hogy egy egyszerű lambda definíciót alakítsunk át függvénysé, amely képes feldolgozni a vektor minden egyes elemét. Fontos megjegyezni, hogy a vektorizálás az csak hurok az elemek felett és nincs hatással a program teljesítményére. A NumPy is lehetővé teszi sugárzás , ami azt jelenti, hogy a fenti összetett kód helyett egyszerűen megtehettük volna:

mátrix* 5

És az eredmény pontosan ugyanaz lett volna. Először az összetett részt akartam megmutatni, különben kihagytad volna a részt!

Átlag, szórás és szórás

A NumPy segítségével könnyen végrehajthatók a vektorok leíró statisztikáival kapcsolatos műveletek. A vektor átlagát a következőképpen lehet kiszámítani:

np.jelent(mátrix)

Egy vektor varianciáját a következőképpen lehet kiszámítani:

np.var(mátrix)

A vektor szórása a következőképpen számítható ki:

pl(mátrix)

A fenti parancsok kimenete az adott mátrixon itt található:

Mátrix transzponálása

Az átültetés egy nagyon gyakori művelet, amelyről hallani fog, amikor mátrixok veszik körül. Az átültetés csak egy módszer a mátrix oszlop- és sorértékeinek felcserélésére. Felhívjuk figyelmét, hogy a vektor nem transzponálható mivel a vektor csak értékgyűjtemény, anélkül, hogy ezeket az értékeket sorokba és oszlopokba sorolnák. Kérjük, vegye figyelembe, hogy a sorvektor oszlopvektorrá alakítása nem transzponál (a lineáris algebra definíciói alapján, amely kívül esik ezen a leckén).

Egyelőre csak egy mátrix átültetésével találjuk meg a békét. Nagyon egyszerű elérni a mátrix transzponálását a NumPy segítségével:

mátrix.T

A fenti parancs kimenete az adott mátrixon itt található:

Ugyanezt a műveletet el lehet végezni egy sorvektorral is, hogy azt oszlopvektorrá alakítsuk át.

Mátrix lapítása

Egy mátrixot egydimenziós tömbré alakíthatunk, ha elemeit lineárisan akarjuk feldolgozni. Ezt a következő kódrészlettel teheti meg:

mátrix.lapított()

A fenti parancs kimenete az adott mátrixon itt található:

Ne feledje, hogy az ellaposított mátrix egydimenziós tömb, egyszerűen lineáris divatban.

Sajátértékek és sajátvektorok kiszámítása

A sajátvektorokat nagyon gyakran használják a Machine Learning csomagokban. Tehát, ha egy lineáris transzformációs függvényt mátrixként mutatunk be, akkor X, sajátvektorok azok a vektorok, amelyek csak a vektor léptékében változnak, de nem az irányát. Azt mondhatjuk, hogy:

Xv = γv

Itt X a négyzet mátrix, γ pedig az Eigenvalues. Ezenkívül a v tartalmazza az sajátvektorokat. A NumPy segítségével könnyen kiszámíthatók a sajátértékek és a sajátvektorok. Itt van a kódrészlet, ahol ugyanazt mutatjuk be:

értékek, evektorok = np.linalg.eig(mátrix)

A fenti parancs kimenete az adott mátrixon itt található:

Vektorok pontozott termékei

A vektorok pontszerű termékei 2 vektor megszorzásának egyik módja. Arról mesél hogy a vektorok mekkora része azonos irányban van , ellentétben a kereszttermékkel, amely az ellenkezőjét mondja, mennyire kevés a vektor ugyanabban az irányban (ortogonálisnak nevezik). Kiszámíthatjuk két vektor pont szorzatát az itt található kódrészlet szerint:

a = np.tömb([3,5,6])
b = np.tömb([2. 3,tizenöt,1])

np.pont(a, b)

A fenti parancs kimenete az adott tömbökön itt található:

Mátrixok összeadása, kivonása és szorzása

Több mátrix hozzáadása és kivonása meglehetősen egyszerű művelet a mátrixokban. Ennek két módja van. Nézzük meg a kódrészletet ezen műveletek végrehajtásához. Az egyszerűség érdekében kétszer fogjuk használni ugyanazt a mátrixot:

np.add(mátrix, mátrix)

Ezután két mátrix kivonható a következőképpen:

np. kivonni(mátrix, mátrix)

A fenti parancs kimenete az adott mátrixon itt található:

A várakozásoknak megfelelően a mátrix minden egyes elemét hozzáadjuk/kivonjuk a megfelelő elemmel. A mátrix megszorzása hasonló a pontszerű termék megtalálásához, mint korábban:

np.pont(mátrix, mátrix)

A fenti kód megtalálja két mátrix valódi szorzási értékét, a következőképpen megadva:

mátrix*mátrix

A fenti parancs kimenete az adott mátrixon itt található:

Következtetés

Ebben a leckében sok matematikai műveletet végeztünk a vektorokkal, mátrixokkal és tömbökkel kapcsolatban, amelyeket általában használnak Adatfeldolgozás, leíró statisztika és adattudomány. Ez egy gyors lecke volt, amely a fogalmak sokféleségének csak a leggyakoribb és legfontosabb részeit foglalta magában, de ezeknek a műveleteknek nagyon jó képet kell adniuk arról, hogy milyen műveletek végezhetők el ezen adatstruktúrák kezelése során.

Kérjük, ossza meg visszajelzését a leckével kapcsolatban a Twitteren @linuxhint és @sbmaggarwal (ez vagyok én!).