Python Matrix en inleiding tot NumPy

In dit artikel zullen we leren over Python-matrices met behulp van geneste lijsten en het NumPy-pakket.

Een matrix is ​​een tweedimensionale gegevensstructuur waarin getallen zijn gerangschikt in rijen en kolommen. Bijvoorbeeld:

Deze matrix is ​​een 3x4 (uitgesproken als "drie bij vier") matrix omdat deze 3 rijen en 4 kolommen heeft.

Python Matrix

Python heeft geen ingebouwd type voor matrices. We kunnen de lijst van een lijst echter als een matrix behandelen. Bijvoorbeeld:

 A = ((1, 4, 5), (-5, 8, 9)) 

We kunnen deze lijst van een lijst behandelen als een matrix met 2 rijen en 3 kolommen.

Zorg ervoor dat u de Python-lijsten leert kennen voordat u doorgaat met dit artikel.

Laten we eens kijken hoe we met een geneste lijst kunnen werken.

 A = ((1, 4, 5, 12), (-5, 8, 9, 0), (-6, 7, 11, 19)) print("A =", A) print("A(1) =", A(1)) # 2nd row print("A(1)(2) =", A(1)(2)) # 3rd element of 2nd row print("A(0)(-1) =", A(0)(-1)) # Last element of 1st Row column = (); # empty list for row in A: column.append(row(2)) print("3rd column =", column) 

Wanneer we het programma uitvoeren, is de uitvoer:

 A = ((1, 4, 5, 12), (-5, 8, 9, 0), (-6, 7, 11, 19)) A (1) = (-5, 8, 9, 0) A (1) (2) = 9 A (0) (- 1) = 12 3e kolom = (5, 9, 11) 

Hier zijn nog enkele voorbeelden gerelateerd aan Python-matrices die geneste lijsten gebruiken.

  • Voeg twee matrices toe
  • Transponeer een matrix
  • Vermenigvuldig twee matrices

Het gebruik van geneste lijsten als een matrix werkt voor eenvoudige computertaken, maar er is een betere manier om met matrices te werken in Python met behulp van het NumPy-pakket.

NumPy-array

NumPy is een pakket voor wetenschappelijk computergebruik dat ondersteuning biedt voor een krachtig N-dimensionaal array-object. Voordat u NumPy kunt gebruiken, moet u het installeren. Voor meer informatie,

  • Bezoek: Hoe installeer ik NumPy?
  • Als u Windows gebruikt, download en installeer dan anaconda-distributie van Python. Het wordt geleverd met NumPy en andere verschillende pakketten met betrekking tot datawetenschap en machine learning.

Zodra NumPy is geïnstalleerd, kunt u het importeren en gebruiken.

NumPy biedt een multidimensionale reeks getallen (wat eigenlijk een object is). Laten we een voorbeeld nemen:

 import numpy as np a = np.array((1, 2, 3)) print(a) # Output: (1, 2, 3) print(type(a)) # Output: 

Zoals je kunt zien, wordt de array-klasse van NumPy aangeroepen ndarray.

Hoe maak je een NumPy-array aan?

Er zijn verschillende manieren om NumPy-arrays te maken.

1. Array van gehele getallen, drijvers en complexe getallen

 import numpy as np A = np.array(((1, 2, 3), (3, 4, 5))) print(A) A = np.array(((1.1, 2, 3), (3, 4, 5))) # Array of floats print(A) A = np.array(((1, 2, 3), (3, 4, 5)), dtype = complex) # Array of complex numbers print(A) 

Wanneer u het programma uitvoert, is de uitvoer:

 ((1 2 3) (3 4 5)) ((1.1 2. 3.) (3. 4. 5.)) ((1. + 0.j 2. + 0.j 3. + 0.j) (3. + 0.j 4. + 0.j 5. + 0.j)) 

2. Reeks nullen en enen

 import numpy as np zeors_array = np.zeros( (2, 3) ) print(zeors_array) ''' Output: ((0. 0. 0.) (0. 0. 0.)) ''' ones_array = np.ones( (1, 5), dtype=np.int32 ) // specifying dtype print(ones_array) # Output: ((1 1 1 1 1)) 

Hier hebben we gespecificeerd dtypetot 32 bits (4 bytes). Daarom kan deze array waarden aannemen van tot .-2-312-31-1

3. Arange () en shape () gebruiken

 import numpy as np A = np.arange(4) print('A =', A) B = np.arange(12).reshape(2, 6) print('B =', B) ''' Output: A = (0 1 2 3) B = (( 0 1 2 3 4 5) ( 6 7 8 9 10 11)) ''' 

Lees meer over andere manieren om een ​​NumPy-array te maken.

Matrix-operaties

Hierboven hebben we u 3 voorbeelden gegeven: optellen van twee matrices, vermenigvuldiging van twee matrices en transponeren van een matrix. We hebben eerder geneste lijsten gebruikt om die programma's te schrijven. Laten we eens kijken hoe we dezelfde taak kunnen uitvoeren met behulp van de NumPy-array.

Toevoeging van twee matrices

We gebruiken een +operator om overeenkomstige elementen van twee NumPy-matrices toe te voegen.

 import numpy as np A = np.array(((2, 4), (5, -6))) B = np.array(((9, -3), (3, 6))) C = A + B # element wise addition print(C) ''' Output: ((11 1) ( 8 0)) '''

Vermenigvuldiging van twee matrices

Om twee matrices te vermenigvuldigen, gebruiken we dot()methode. Lees meer over hoe numpy.dot werkt.

Opmerking: * wordt gebruikt voor arrayvermenigvuldiging (vermenigvuldiging van overeenkomstige elementen van twee arrays), niet voor matrixvermenigvuldiging.

 import numpy as np A = np.array(((3, 6, 7), (5, -3, 0))) B = np.array(((1, 1), (2, 1), (3, -3))) C = A.dot(B) print(C) ''' Output: (( 36 -12) ( -1 2)) ''' 

Transponeren van een matrix

We gebruiken numpy.transpose om de transponering van een matrix te berekenen.

 import numpy as np A = np.array(((1, 1), (2, 1), (3, -3))) print(A.transpose()) ''' Output: (( 1 2 3) ( 1 1 -3)) ''' 

Zoals u kunt zien, heeft NumPy onze taak veel gemakkelijker gemaakt.

Toegang tot matrixelementen, rijen en kolommen

Access matrix elements

Similar like lists, we can access matrix elements using index. Let's start with a one-dimensional NumPy array.

 import numpy as np A = np.array((2, 4, 6, 8, 10)) print("A(0) =", A(0)) # First element print("A(2) =", A(2)) # Third element print("A(-1) =", A(-1)) # Last element 

When you run the program, the output will be:

 A(0) = 2 A(2) = 6 A(-1) = 10 

Now, let's see how we can access elements of a two-dimensional array (which is basically a matrix).

 import numpy as np A = np.array(((1, 4, 5, 12), (-5, 8, 9, 0), (-6, 7, 11, 19))) # First element of first row print("A(0)(0) =", A(0)(0)) # Third element of second row print("A(1)(2) =", A(1)(2)) # Last element of last row print("A(-1)(-1) =", A(-1)(-1)) 

When we run the program, the output will be:

 A(0)(0) = 1 A(1)(2) = 9 A(-1)(-1) = 19 

Access rows of a Matrix

 import numpy as np A = np.array(((1, 4, 5, 12), (-5, 8, 9, 0), (-6, 7, 11, 19))) print("A(0) =", A(0)) # First Row print("A(2) =", A(2)) # Third Row print("A(-1) =", A(-1)) # Last Row (3rd row in this case)

When we run the program, the output will be:

 A(0) = (1, 4, 5, 12) A(2) = (-6, 7, 11, 19) A(-1) = (-6, 7, 11, 19) 

Access columns of a Matrix

 import numpy as np A = np.array(((1, 4, 5, 12), (-5, 8, 9, 0), (-6, 7, 11, 19))) print("A(:,0) =",A(:,0)) # First Column print("A(:,3) =", A(:,3)) # Fourth Column print("A(:,-1) =", A(:,-1)) # Last Column (4th column in this case) 

When we run the program, the output will be:

 A(:,0) = ( 1 -5 -6) A(:,3) = (12 0 19) A(:,-1) = (12 0 19) 

If you don't know how this above code works, read slicing of a matrix section of this article.

Slicing of a Matrix

Slicing of a one-dimensional NumPy array is similar to a list. If you don't know how slicing for a list works, visit Understanding Python's slice notation.

Laten we een voorbeeld nemen:

 import numpy as np letters = np.array((1, 3, 5, 7, 9, 7, 5)) # 3rd to 5th elements print(letters(2:5)) # Output: (5, 7, 9) # 1st to 4th elements print(letters(:-5)) # Output: (1, 3) # 6th to last elements print(letters(5:)) # Output:(7, 5) # 1st to last elements print(letters(:)) # Output:(1, 3, 5, 7, 9, 7, 5) # reversing a list print(letters(::-1)) # Output:(5, 7, 9, 7, 5, 3, 1) 

Laten we nu eens kijken hoe we een matrix kunnen snijden.

 import numpy as np A = np.array(((1, 4, 5, 12, 14), (-5, 8, 9, 0, 17), (-6, 7, 11, 19, 21))) print(A(:2, :4)) # two rows, four columns ''' Output: (( 1 4 5 12) (-5 8 9 0)) ''' print(A(:1,)) # first row, all columns ''' Output: (( 1 4 5 12 14)) ''' print(A(:,2)) # all rows, second column ''' Output: ( 5 9 11) ''' print(A(:, 2:5)) # all rows, third to the fifth column '''Output: (( 5 12 14) ( 9 0 17) (11 19 21)) ''' 

Zoals je kunt zien, maakt het gebruik van NumPy (in plaats van geneste lijsten) het een stuk gemakkelijker om met matrices te werken, en we hebben de basis nog niet eens bekrast. We raden je aan om het NumPy-pakket in detail te onderzoeken, vooral als je Python probeert te gebruiken voor data science / analytics.

NumPy-bronnen die u mogelijk nuttig vindt:

  • NumPy-zelfstudie
  • NumPy-referentie

Interessante artikelen...