Articles

Python: vektorer, matriser och matriser med NumPy

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

NumPy library tillåter oss att utföra olika operationer som måste göras på datastrukturer som ofta används i maskininlärning och datavetenskap som vektorer, matriser och matriser. Vi visar bara de vanligaste operationerna med NumPy som används i många Maskininlärningspipelines. Slutligen, Observera att NumPy bara är ett sätt att utföra operationerna, så de matematiska operationerna vi visar är huvudfokus för den här lektionen och inte själva NumPy-paketet. Nu sätter vi igång.

Vad är en vektor?

enligt Google är en vektor en kvantitet som har riktning såväl 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 för funktionerna. Vi kan skapa en vektor i NumPy med följande kodavsnitt:

importera numpy som np
row_vector = NP.array ()
print (row_vector)

i ovanstående kodavsnitt skapade vi en radvektor. Vi kan också skapa en kolumnvektor som:

importera numpy som np
col_vector = NP.array (,,])
print (col_vector)

att göra en matris

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

matrix = np.array (,,])
print (matrix)

även om matrisen exakt liknar multidimensionell array rekommenderas inte matrisdatastrukturen på grund av två skäl:

  1. arrayen är standarden när det gäller NumPy-paketet
  2. de flesta operationerna med NumPy returnerar arrayer och inte en matris

med 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. Fördelen med gles matrix ä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:

för att förstå hur koden fungerar kommer vi att titta på utgången här:

i ovanstående kod använde vi en Numpys funktion för att skapa en komprimerad gles radmatris där icke-nollelement representeras med nollbaserade index. Det finns olika typer av gles matris, som:

  • komprimerad gles kolumn
  • lista över listor
  • ordbok för nycklar

Vi kommer inte att dyka in i andra glesa matriser här men vet att var och en av deras är användning är specifik och ingen kan betecknas som ’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 samma. Låt oss se några kodavsnitt för samma:

matrix = NP.array (,
,
])
mul_5 = lambda x: x * 5
vectorized_mul_5 = np.vectorize(mul_5)
vectorized_mul_5(matrix)

för att förstå hur koden fungerar kommer vi att titta på utgången här:

i ovanstående kodavsnitt använde vi vectorize-funktionen som ingår i 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 vectorize bara är en slinga över elementen och det har ingen effekt på programmets prestanda. NumPy tillåter också sändning, vilket innebär att vi istället för ovanstående komplexa kod helt enkelt kunde ha gjort:

matrix * 5

och resultatet skulle ha varit exakt detsamma. Jag ville visa den komplexa delen först, annars skulle du ha hoppat över avsnittet!

medelvärde, varians och standardavvikelse

med NumPy är det enkelt att utföra operationer relaterade till beskrivande statistik över vektorer. Medelvärdet av 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:

np.STD (matrix)

utmatningen av ovanstående kommandon på den givna 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 kolumnar och radvärden för en matris. Observera att en vektor inte kan 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 transponerar (baserat på definitionerna av linjär algebra, som ligger utanför ramen för denna lektion).

För tillfället kommer vi att hitta fred bara genom att transponera en matris. Det är mycket enkelt att komma åt transponeringen av en matris med NumPy:

matris.T

utmatningen av ovanstående kommando på den givna matrisen ges här:

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

platta en matris

Vi kan konvertera en matris till en endimensionell matris 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 givna matrisen ges här:

Observera att plattmatrisen är en endimensionell array, helt enkelt linjär i mode.

beräkning av egenvärden och egenvektorer

egenvektorer används mycket ofta i Maskininlärningspaket. Så, när en linjär transformationsfunktion presenteras som en matris, då X, är egenvektorer vektorerna som bara ändras i vektorns skala men inte dess riktning. Vi kan säga att:

Xv = yv

Här är X kvadratmatrisen och XX innehåller egenvärdena. V innehåller också egenvektorerna. Med NumPy är det enkelt att beräkna egenvärden och egenvektorer. Här är kodavsnittet där vi visar detsamma:

evalues, evectors = np.linalg.EIG (matris)

utmatningen av ovanstående kommando på den givna matrisen ges här:

punktprodukter av vektorer

punktprodukter av vektorer ä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 motsatsen, hur lite vektorerna är i samma riktning (kallad ortogonal). Vi kan beräkna punktprodukten av två vektorer som anges i kodavsnittet här:

a = np.array ()
b = np.array ()
np.dot (a, b)

utmatningen av ovanstående kommando på de givna matriserna ges här:

att lägga till, subtrahera och multiplicera matriser

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

np.Lägg till (matris, matris)

därefter kan två matriser subtraheras som:

np.subtrahera (matris, matris)

utgången från ovanstående kommando på den givna matrisen ges här:

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

np.punkt (matris, matris)

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

matris * matris

utgången från ovanstående kommando på den givna 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 bara täckte de vanligaste och viktigaste delarna av de många olika koncepten, men dessa operationer bör ge en mycket god uppfattning om vad alla operationer kan utföras när de hanterar dessa datastrukturer.

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