In questo articolo, impareremo a conoscere le matrici Python usando elenchi annidati e il pacchetto NumPy.
Una matrice è una struttura dati bidimensionale in cui i numeri sono disposti in righe e colonne. Per esempio:
Questa matrice è una matrice 3x4 (pronunciata "tre per quattro") perché ha 3 righe e 4 colonne.
Python Matrix
Python non ha un tipo integrato per le matrici. Tuttavia, possiamo trattare l'elenco di un elenco come una matrice. Per esempio:
A = ((1, 4, 5), (-5, 8, 9))
Possiamo trattare questo elenco di un elenco come una matrice con 2 righe e 3 colonne.
Assicurati di conoscere gli elenchi di Python prima di procedere con questo articolo.
Vediamo come lavorare con un elenco annidato.
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)
Quando eseguiamo il programma, l'output sarà:
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 3a colonna = (5, 9, 11)
Ecco alcuni altri esempi relativi alle matrici Python che utilizzano elenchi annidati.
- Aggiungi due matrici
- Trasponi una matrice
- Moltiplica due matrici
L'uso di elenchi annidati come matrice funziona per semplici attività di calcolo, tuttavia, esiste un modo migliore per lavorare con le matrici in Python utilizzando il pacchetto NumPy.
NumPy Array
NumPy è un pacchetto per il calcolo scientifico che supporta un potente oggetto array N-dimensionale. Prima di poter utilizzare NumPy, è necessario installarlo. Per maggiori informazioni,
- Visita: Come installare NumPy?
- Se sei su Windows, scarica e installa la distribuzione anaconda di Python. Viene fornito con NumPy e altri diversi pacchetti relativi alla scienza dei dati e all'apprendimento automatico.
Una volta installato NumPy, puoi importarlo e usarlo.
NumPy fornisce un array multidimensionale di numeri (che in realtà è un oggetto). Facciamo un esempio:
import numpy as np a = np.array((1, 2, 3)) print(a) # Output: (1, 2, 3) print(type(a)) # Output:
Come puoi vedere, viene chiamata la classe array di NumPy ndarray
.
Come creare un array NumPy?
Esistono diversi modi per creare array NumPy.
1. Array di interi, float e numeri complessi
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)
Quando esegui il programma, l'output sarà:
((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. Array di zeri e uno
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))
Qui, abbiamo specificato dtype
a 32 bit (4 byte). Quindi, questo array può assumere valori da a .-2-31
2-31-1
3. Utilizzando arange () e shape ()
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)) '''
Ulteriori informazioni su altri modi per creare un array NumPy.
Operazioni con matrici
Sopra, vi abbiamo fornito 3 esempi: addizione di due matrici, moltiplicazione di due matrici e trasposizione di una matrice. Abbiamo usato elenchi annidati prima di scrivere quei programmi. Vediamo come possiamo fare la stessa operazione usando l'array NumPy.
Aggiunta di due matrici
Usiamo l' +
operatore per aggiungere gli elementi corrispondenti di due matrici NumPy.
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)) '''
Moltiplicazione di due matrici
Per moltiplicare due matrici, usiamo il dot()
metodo. Ulteriori informazioni su come funziona numpy.dot.
Nota: *
viene utilizzato per la moltiplicazione di array (moltiplicazione di elementi corrispondenti di due array) non per la moltiplicazione di matrici.
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)) '''
Trasposizione di una matrice
Usiamo numpy.transpose per calcolare la trasposizione di una matrice.
import numpy as np A = np.array(((1, 1), (2, 1), (3, -3))) print(A.transpose()) ''' Output: (( 1 2 3) ( 1 1 -3)) '''
Come puoi vedere, NumPy ha reso il nostro compito molto più semplice.
Accesso a elementi, righe e colonne della matrice
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.
Facciamo un esempio:
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)
Vediamo ora come tagliare una matrice.
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)) '''
Come puoi vedere, l'uso di NumPy (invece di elenchi annidati) rende molto più facile lavorare con le matrici e non abbiamo nemmeno scalfito le basi. Ti suggeriamo di esplorare il pacchetto NumPy in dettaglio, soprattutto se stai cercando di utilizzare Python per la scienza dei dati / analisi.
Risorse NumPy che potresti trovare utili:
- Tutorial su NumPy
- Riferimento NumPy