Python: vektorer, matriser och matriser med NumPy

Python Vectors Matrices



I den här lektionen kommer vi att titta på några fina tips och tricks för att spela med vektorer, matriser och matriser med NumPy -biblioteket i Python. Denna lektion är en mycket bra utgångspunkt om du kommer igång med datavetenskap och behöver en inledande matematisk översikt över dessa komponenter och hur vi kan spela med dem med NumPy i kod.

NumPy -biblioteket tillåter oss att utföra olika operationer som måste utföras på datastrukturer som ofta används i maskininlärning och datavetenskap som vektorer, matriser och matriser. Vi kommer bara att visa de vanligaste operationerna med NumPy som används i många maskininlärningsledningar. Slutligen, observera att NumPy bara är ett sätt att utföra operationerna, så de matematiska operationerna vi visar är huvudfokus för denna lektion och inte NumPy -paketet i sig. Låt oss börja.







Vad är en vektor?

Enligt Google är en vektor en mängd som har såväl riktning som storlek, särskilt för att bestämma positionen för en punkt i rymden i förhållande till en annan.





Vektorer är mycket viktiga i maskininlärning eftersom de inte bara beskriver storleken utan också riktningen på funktionerna. Vi kan skapa en vektor i NumPy med följande kodavsnitt:





importera numpysomt.ex

row_vector = np.array([1,2,3])
skriva ut(rad_vektor)

I kodavsnittet ovan skapade vi en radvektor. Vi kan också skapa en kolumnvektor som:

importera numpysomt.ex

col_vector = np.array([[1],[2],[3]])
skriva ut(col_vector)

Att göra en matris

En matris kan helt enkelt förstås som en tvådimensionell uppsättning. Vi kan göra en matris med NumPy genom att göra en flerdimensionell array:



matris = np.array([[1,2,3],[4,5,6],[7,8,9]])
skriva ut(matris)

Även om matrisen exakt liknar den flerdimensionella matrisen, matrisdatastrukturen rekommenderas inte av två skäl:

  1. Arrayen är standarden när det gäller NumPy -paketet
  2. De flesta operationer med NumPy returnerar matriser och inte en matris

Med hjälp av en gles matris

För att påminna är en gles matris den där de flesta objekten är noll. Nu är ett vanligt scenario inom databehandling och maskininlärning bearbetning av matriser där de flesta elementen är noll. Tänk till exempel på en matris vars rader beskriver varje video på Youtube och kolumner representerar varje registrerad användare. Varje värde representerar om användaren har tittat på en video eller inte. Naturligtvis kommer majoriteten av värdena i denna matris att vara noll. De fördel med gles matris är att den inte lagrar värdena som är noll. Detta resulterar i en enorm beräkningsfördel och lagringsoptimering också.

Låt oss skapa en gnistmatris här:

från scipy import gles

original_matrix = np.array([[1,0,3],[0,0,6],[7,0,0]])
sparse_matrix = sparse.csr_matrix(original_matris)
skriva ut(gles_matris)

För att förstå hur koden fungerar, kommer vi att titta på utdata här:

I koden ovan använde vi en NumPys funktion för att skapa en Komprimerad gles rad matris där icke-nollelement representeras med hjälp av de nollbaserade indexen. Det finns olika typer av gles matris, som:

  • Komprimerad gles kolumn
  • Lista över listor
  • Ordlista över nycklar

Vi kommer inte att dyka in i andra glesa matriser här men vet att varje användning är specifik och ingen kan kallas 'bäst'.

Tillämpa operationer på alla vektorelement

Det är ett vanligt scenario när vi behöver tillämpa en gemensam operation på flera vektorelement. Detta kan göras genom att definiera en lambda och sedan vektorisera densamma. Låt oss se några kodavsnitt för samma sak:

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

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

vektoriserad_mul_5(matris)

För att förstå hur koden fungerar, kommer vi att titta på utdata här:

I ovanstående kodavsnitt använde vi vektoriseringsfunktionen som är en del av NumPy -biblioteket för att omvandla en enkel lambda -definition till en funktion som kan bearbeta varje element i vektorn. Det är viktigt att notera att vektorisering är bara en slinga över elementen och det har ingen effekt på programmets prestanda. NumPy tillåter också sändning , vilket betyder att vi i stället för ovanstående komplexa kod enkelt kunde ha gjort:

matris* 5

Och resultatet hade blivit exakt detsamma. Jag ville först visa den komplexa delen, annars hade du hoppat över avsnittet!

Medelvärde, varians och standardavvikelse

Med NumPy är det enkelt att utföra operationer relaterade till beskrivande statistik om vektorer. Medelvärdet för en vektor kan beräknas som:

np. medelvärde(matris)

Varians för en vektor kan beräknas som:

np.var(matris)

Standardavvikelse för en vektor kan beräknas som:

t.ex. std(matris)

Utmatningen av ovanstående kommandon på den angivna matrisen ges här:

Transponering av en matris

Transponering är en mycket vanlig operation som du kommer att höra om när du är omgiven av matriser. Transponering är bara ett sätt att byta kolumn- och radvärden för en matris. Observera att a vektorn kan inte transponeras som en vektor är bara en samling värden utan att dessa värden kategoriseras i rader och kolumner. Observera att konvertering av en radvektor till en kolumnvektor inte transponeras (baserat på definitionerna av linjär algebra, som ligger utanför ramen för denna lektion).

För tillfället hittar vi lugn bara genom att införliva en matris. Det är mycket enkelt att komma åt transponeringen av en matris med NumPy:

matris.T

Utmatningen av ovanstående kommando på den angivna matrisen ges här:

Samma operation kan utföras på en radvektor för att konvertera den till en kolumnvektor.

Utplattning av en matris

Vi kan konvertera en matris till en endimensionell array om vi vill bearbeta dess element på ett linjärt sätt. Detta kan göras med följande kodavsnitt:

matris. platta()

Utmatningen av ovanstående kommando på den angivna matrisen ges här:

Observera att plattmatrisen är en endimensionell matris, helt enkelt linjär.

Beräkning av Eigenvärden och Eigenvektorer

Eigenvektorer används mycket ofta i maskininlärningspaket. Så när en linjär transformationsfunktion presenteras som en matris, då är X, Eigenvektorer vektorerna som endast förändras i skala för vektorn men inte dess riktning. Vi kan säga så:

Xv = yv

Här är X den fyrkantiga matrisen och γ innehåller Eigen -värdena. Dessutom innehåller v Eigenvektorerna. Med NumPy är det enkelt att beräkna Eigenvärden och Eigenvektorer. Här är kodavsnittet där vi visar detsamma:

utvärderingar, evektorer = np.linalg.eig(matris)

Utmatningen av ovanstående kommando på den angivna matrisen ges här:

Prickprodukter av vektorer

Dot Products of Vectors är ett sätt att multiplicera 2 vektorer. Det berättar om hur mycket av vektorerna är i samma riktning , i motsats till korsprodukten som säger dig motsatsen, hur lite vektorerna är i samma riktning (kallad ortogonal). Vi kan beräkna prickprodukten för två vektorer som anges i kodavsnittet här:

a = np.array([3,5,6])
b = np.array([2. 3,femton,1])

np.dot(a, b)

Utmatningen av kommandot ovan på de angivna matriserna ges här:

Lägga till, subtrahera och multiplicera matriser

Att lägga till och subtrahera flera matriser är en ganska enkel operation i matriser. Det finns två sätt på vilket detta kan göras. Låt oss titta på kodavsnittet för att utföra dessa operationer. För att hålla detta enkelt ska vi använda samma matris två gånger:

np. lägg till(matris, matris)

Därefter kan två matriser subtraheras som:

np. subtrahera(matris, matris)

Utmatningen av ovanstående kommando på den angivna matrisen ges här:

Som förväntat adderas/subtraheras var och en av elementen i matrisen med motsvarande element. Att multiplicera en matris liknar att hitta punktprodukten som vi gjorde tidigare:

np.dot(matris, matris)

Ovanstående kod hittar det verkliga multiplikationsvärdet för två matriser, givet som:

matris*matris

Utmatningen av ovanstående kommando på den angivna matrisen ges här:

Slutsats

I den här lektionen gick vi igenom många matematiska operationer relaterade till vektorer, matriser och matriser som vanligtvis används Databehandling, beskrivande statistik och datavetenskap. Detta var en snabb lektion som endast täckte de vanligaste och viktigaste delarna av den stora variationen av koncept, men dessa operationer borde ge en mycket bra uppfattning om vad alla operationer kan utföras när man hanterar dessa datastrukturer.

Vänligen dela din feedback fritt om lektionen på Twitter med @linuxhint och @sbmaggarwal (det är jag!).