Python Tutorial: cos’è NumPy e come usare la libreria NumPy in Python
Python è un linguaggio evoluto che deve la sua potenza, e la sua popolarità alle librerie.
NumPy è una di queste, forse quella in grado di esprimere la maggiore versatilità del linguaggio.
Questo tutorial NumPy spiega le basi di NumPy, come la sua architettura e ambiente, vediamolo insieme.
Estimated reading time: 13 minuti
NumPy, che sta per Numerical Python, è una libreria Python open source composta da elementi multidimensionali e monodimensionali. È uno standard che calcola i dati numerici in Python. NumPy è più ampiamente utilizzato in quasi tutti i domini in cui è richiesto il calcolo numerico, come la scienza e l’ingegneria; quindi, le funzionalità API NumPy sono altamente utilizzate nella scienza dei dati e nei pacchetti Python scientifici, tra cui Pandas, SciPy, Matplotlib, scikit-learn, scikit-image e molti altri.
Questo tutorial NumPy spiega le basi di NumPy, come la sua architettura, e l’ambiente. Tutto questo è spiegato con l’aiuto di esempi per una migliore comprensione.
Perché usare NumPy
NumPy è un pacchetto fondamentale per il calcolo numerico in Python. Fornisce funzioni matematiche per calcolare i dati e funzioni per far funzionare in modo efficiente array e matrici multidimensionali. Ecco alcuni motivi per cui NumPy è fondamentale:
- NumPy include una vasta gamma di funzioni matematiche per l’aritmetica di base, l’algebra lineare, l’analisi di Fourier e altro ancora.
- NumPy esegue operazioni numeriche su grandi set di dati in modo efficiente.
- NumPy supporta array multidimensionali, consentendo la rappresentazione di strutture di dati complesse come immagini, onde sonore e tensori nei modelli di apprendimento automatico.
- Supporta la scrittura di codice conciso e leggibile per calcoli matematici complessi.
- NumPy si integra con altre biblioteche per fare calcoli scientifici; questi sono SciPy (per l’informatica scientifica), Pandas (per la manipolazione e l’analisi dei dati) e scikit-learn (per l’apprendimento automatico).
- Molte librerie e strumenti di informatica scientifica e numerica sono costruiti su NumPy.
- La sua ampia adozione e stabilità lo rendono una scelta standard per le attività di calcolo numerico.
Nel complesso, NumPy svolge un ruolo cruciale nell’ecosistema Python per il calcolo scientifico, l’analisi dei dati, l’apprendimento automatico e altro ancora. Le sue efficienti operazioni di array e ampie funzioni matematiche lo rendono uno strumento indispensabile per lavorare con dati numerici in Python.
NumPy Applicazioni
L’API NumPy in Python è utilizzata principalmente per l’informatica numerica. Fornisce supporto per una vasta gamma di funzioni matematiche per operare sui dati in modo efficiente. Di seguito sono riportati alcuni settori di applicazione comuni in cui NumPy è ampiamente utilizzato:
- Analisi dei dati: NumPy offre operazioni di matrici rapide ed efficaci, rendendole adatte a attività come la pulizia dei dati, il filtraggio e la trasformazione. È utilizzato prevalentemente nell’analisi e nella gestione scientifica dei dati, in particolare quando si lavora con set di dati estesi e di grandi dimensioni.
- Apprendimento automatico (machine learning) e intelligenza artificiale: diversi framework di machine learning e deep learning in Python, come TensorFlow e PyTorch, si basano su array NumPy per la gestione di dati di input, parametri di modello e uscite.
- Informatica scientifica: NumPy è ampiamente utilizzato in applicazioni di calcolo scientifico come fisica, chimica, biologia e astronomia per la manipolazione dei dati, simulazioni numeriche e analisi. NumPy è spesso utilizzato nelle simulazioni numeriche e nella modellazione computazionale per risolvere equazioni differenziali, problemi di ottimizzazione e altri problemi matematici.
- Manipolazione delle array: NumPy fornisce un assortimento di metodi per manipolare array, come il ridimensionamento, l’affettatura, l’indicizzazione, l’impilamento, la scissione e la concatenatura degli array. Queste tecniche sono essenziali per la preparazione e la manipolazione dei dati in diversi lavori di calcolo scientifico.
- Finanza ed economia: l’API NumP è anche ampiamente utilizzata nell’analisi dei dati finanziari e nell’economia per effettuare l’ottimizzazione del portafoglio, l’analisi dei rischi, l’analisi delle serie temporali e la modellazione statistica.
- Engineering and Robotics: NumPy è utilizzato in discipline ingegneristiche come l’ingegneria meccanica, civile ed elettrica per compiti come l’analisi degli elementi finiti, la progettazione di sistemi di controllo e le simulazioni di robotica.
- Elaborazione di immagini e segnali: NumPy è ampiamente utilizzato nell’elaborazione e nell’analisi di immagini e segnali.
- Visualizzazione dei dati: NumPy non fornisce la visualizzazione dei dati, ma supporta le librerie Matplotlib e Seaborn per generare grafici e visualizzazioni da dati numerici.
Nel complesso, la versatilità e l’efficienza di NumPy lo rendono un pacchetto Python essenziale in una vasta gamma di aree di applicazione nel calcolo scientifico, nell’analisi dei dati e oltre.
Esempio
Il seguente è un esempio di Python NumPy:
# Importing NumPy Array
import numpy as np
# Creating an array using np.array() method
arr = np.array([10, 20, 30, 40, 50])
# Printing
print(arr) # Prints [10 20 30 40 50]
NumPy Codebase
Il codice sorgente di NumPy può essere trovato in questo repository github: https://github.com/numpy/numpy
La documentazione di NumPy
La documentazione di NumPy, i manuali di riferimento e la guida per l’utente possono essere trovati a questi link:
Operazioni con NumPy
Utilizzando NumPy, uno sviluppatore può eseguire le seguenti operazioni
- Operazioni matematiche e logiche sugli array.
- Fourier si trasforma e le routine per la manipolazione delle forme.
- Operazioni legate all’algebra lineare. NumPy ha funzioni integrate per l’algebra lineare e la generazione di numeri casuali.
Come MatLab
NumPy è spesso usato insieme a pacchetti come SciPy (Scientific Python) e Mat-plotlib. Questa combinazione è ampiamente utilizzata come sostituto di MatLab, una piattaforma popolare per l’informatica tecnica. Tuttavia, l’alternativa Python a MatLab è ora vista come un linguaggio di programmazione più moderno e completo.
È open source, che è un ulteriore vantaggio di NumPy.
Distribuzione NumPy
La distribuzione standard Python non viene fornita con il modulo NumPy. Un’alternativa leggera è installare NumPy usando il popolare programma di installazione di pacchetti Python, pip.
pip install numpy
Il modo migliore per abilitare NumPy è quello di utilizzare un pacchetto binario installabile specifico per il sistema operativo. Questi binari contengono lo stack di SciPy completo (inclusi NumPy, SciPy, matplotlib, IPython, SymPy e pacchetti nose insieme a core Python).
Oggetto NdArray
L’oggetto più importante definito in NumPy è un tipo di array N-dimensionale chiamato ndarray. Descrive la raccolta di oggetti dello stesso tipo. Gli elementi della raccolta sono accessibili utilizzando un indice basato su zero.
Ogni elemento in un ndarray assume la stessa dimensione di blocco nella memoria. Ogni elemento in ndarray è un oggetto di oggetto di tipo dati (chiamato dtype).
Qualsiasi elemento estratto da un oggetto ndarray (per slicing) è rappresentato da un oggetto Python di uno dei tipi di array scalare. Il diagramma seguente mostra una relazione tra ndarray, oggetto di tipo di dati (dtype) e tipo scalare array
Un’istanza di classe ndarray può essere costruita da diverse routine di creazione di array descritti più avanti nel tutorial. Il ndarray di base viene creato utilizzando una funzione di matrice in NumPy come segue .
numpy.array
Crea un ndarray da qualsiasi oggetto che espone l’interfaccia di matrice o da qualsiasi metodo che restituisce un array.
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
Il costruttore di cui sopra prende i seguenti parametri ?
Sr. No. | Parametro & Descrizione |
---|---|
1 | Oggetto Qualsiasi oggetto che espone il metodo di interfaccia array restituisce un array o qualsiasi sequenza (nidava). |
2 | il dtipo Tipo di array di dati desiderati, opzionale |
Il terzo | Copia di copia Opzionale. Per impostazione predefinita (vero), l’oggetto viene copiato |
Il 4 | Ordine di ordine C (voto maggiore) o F (colonna maggiore) o A (qualsiasi) (predefinito) |
5 | Un subok Per impostazione predefinita, l’array restituito è stato costretto a essere un array di classi base. Se è vero, le sottoclassi passavano attraverso |
6 | ndmin Specifica le dimensioni minime dell’array risultante |
Dai un’occhiata ai seguenti esempi per capire meglio.
Esempio 1
import numpy as np
a = np.array([1,2,3])
print a
Le tre righe in sequenza esprimono:
- importazione della libreria numpy e definizione alias np
- definizione array a una dimensione contenente tre elementi: uno, due e tre
- stampa a video dell’array
L’output è il seguente
[1,2,3]
Esempio 2
# more than one dimensions
import numpy as np
a = np.array([[1, 2], [3, 4]])
print a
Le tre righe in sequenza esprimono:
- importazione della libreria numpy e definizione alias np
- definizione array a due dimensioni contenente quattro elementi elementi suddivisi in due righe: uno, due nella prima rigam e tre, quattro nella seconda riga
- stampa a video dell’array
L’output è il seguente
[[1, 2] [3, 4]]
Esempio 3
# minimum dimensions
import numpy as np
a = np.array([1, 2, 3, 4, 5], ndmin = 2)
print a
Le tre righe in sequenza esprimono:
- importazione della libreria numpy e definizione alias np
- definizione array a due dimensioni contenente cinque elementi in una sola riga, con specifica della multidimensionalità mediante parametro ndmin
- stampa a video dell’array
L’output è il seguente
[[1, 2, 3, 4, 5]]
Esempio 4
# dtype parameter import numpy as np a = np.array([1, 2, 3], dtype = complex) print a
L’output è il seguente ?
[ 1.+0.j, 2.+0.j, 3.+0.j]
L’oggetto ndarray è costituito da un segmento unidimensionale contiguo di memoria del computer, combinato con uno schema di indicizzazione che mappa ogni elemento in una posizione nel blocco di memoria. Il blocco di memoria contiene gli elementi in un ordine principale (stile C) o in un ordine principale di colonna (stile FORTRAN o MatLab).
Tipi di Dati
NumPy supporta una varietà molto maggiore di tipi numerici rispetto a Python. La tabella seguente mostra diversi tipi di dati scalari definiti in NumPy.
Sr. No. | Tipi & Descrizione dei dati |
---|---|
1 | I bool Boolean (True o False) immagazzinato come byte |
2 | int Tipo intero predefinito (stesso a C lungo; normalmente int64 o int32) |
Il terzo | – I Identico a C int (normalmente int32 o int64) |
Il 4 | intp Compimento utilizzato per l’indicizzazione (stesso di C ssize-t; normalmente int32 o int64) |
5 | int8 Byte (da 128 a 127) |
6 | – 1 caros16 Integer (-32768 a 32767) |
Il 7 | – il 32 di int Integer (-2147483648-21474847) |
8 | – int64 Integer (-92233720368545708 to 9223372036854775807) |
Il 9 | Uint8 I numeri interger non firmati (da 0 a 255) |
10 | Uint16 Non firmato intero (da 0 a 65535) |
11 | Uint32 Non firmato intero (0 a 4294967295) |
12 | Uint64 Non firmato intero (0 a 1844674407370915) |
13 anni | il galleggiante Corrimano per float64 |
Il 14 | Galleggiante 16 Mezzo galleggiante di precisione: segno bit, esponente a 5 bit, mantissa a 10 bit |
15 anni | il galleggiante 32 Singolo carrinte di precisione: segno, esponente di 8 bit, mantissa a 23 bit |
16 anni | il galleggiante del 64 Doppio carrinte di precisione: segno, 11 bit esponente, mantissa a 52 bit |
17 anni | Complesso di un Cortometraggio per complesso128 |
18 | Complesso di 64 Numero complesso, rappresentato da due carri float a 32 bit (componenti reali e immaginari) |
19 anni | Complesso di 128 Numero complesso, rappresentato da due carri float a 64 bit (componenti reali e immaginari) |
I tipi numerici NumPy sono istanze di oggetti dtype (tipo di dati), ognuno con caratteristiche univoche. I dtypes sono disponibili come np.bool, np.float32, ecc.
Tipo di dati Oggetti (dtype)
Un oggetto di tipo di dati descrive l’interpretazione del blocco fisso di memoria corrispondente a un array, a seconda degli aspetti seguenti
- Tipo di dati (oggetto intero, float o Python)
- La dimensione dei dati
- Perte di ordine (piccolo-endiano o grande-endian)
- In caso di tipo strutturato, i nomi dei campi, il tipo di dati di ciascun campo e parte del blocco di memoria prelevato da ciascun campo.
- Se il tipo di dati è una sottobarray, la sua forma e il tipo di dati
L’ordine di byte è deciso prefissando ” o ”’ al tipo di dati. “” significa che la codifica è poco-endian (meno significativo è memorizzato nel più piccolo indirizzo). “” significa che la codifica è grande-endian (il byte più significativo è memorizzato nel più piccolo indirizzo).
Un oggetto dtype è costruito utilizzando la seguente sintassi
numpy.dtype(object, align, copy)
I parametri sono:
- Oggetto – Da convertire in oggetto tipo di dati
- Allinea – Se è vero, aggiunge l’imbottitura al campo per renderlo simile a C-struct
- Copia – Rende una nuova copia di oggetto dtype. Se falso, il risultato è il riferimento a un oggetto di tipo di dati incorporato
Esempio 1
# using array-scalar type import numpy as np dt = np.dtype(np.int32) print dt
L’output è il seguente:
int32
Esempio 2
#int8, int16, int32, int64 can be replaced by equivalent string 'i1', 'i2','i4', etc. import numpy as np dt = np.dtype('i4') print dt
L’output è il seguente:
int32
Esempio 3
# file name can be used to access content of age column import numpy as np dt = np.dtype([('age',np.int8)]) a = np.array([(10,),(20,),(30,)], dtype = dt) print a['age']
L’output è il seguente:
[10 20 30]
Esempio 4
import numpy as np student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')]) a = np.array([('abc', 21, 50),('xyz', 18, 75)], dtype = student) print a
L’output è il seguente:
[('abc', 21, 50.0), ('xyz', 18, 75.0)]
Ogni tipo di dati incorporato ha un codice di carattere che lo identifica in modo univoco.
- ‘b’ ? booleano
- ‘i’ ? (firmato) intero
- ‘u’ ? non firmato intero
- ‘f’ ? in virgola mobile
- ‘c’ ? punto di complessa-galleggiante
- ‘m’ – timedelta
- ‘M’ ? datatime
- ‘O’ ? (Python) oggetti
- ‘S’, ‘a’ ? (byte-)string
- ‘U’ ? Unicode
- ‘V’ ? dati grezzi (voi)
Attributi di Array
ndarray.shape
Questo attributo array restituisce una tupla composta da dimensioni di matrice. Può anche essere usato per ridimensionare l’array.
Esempio 1
import numpy as np a = np.array([[1,2,3],[4,5,6]]) print a.shape
L’output è il seguente:
(2, 3)
Esempio 2
# this resizes the ndarray import numpy as np a = np.array([[1,2,3],[4,5,6]]) a.shape = (3,2) print a
L’output è il seguente:
[[1, 2] [3, 4] [5, 6]]
ndarray.ndim
Questo attributo dell’array restituisce il numero di dimensioni dell’array.
Esempio 1
# an array of evenly spaced numbers import numpy as np a = np.arange(24) print a
L’output è il seguente:
[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
Esempio 2
# this is one dimensional array import numpy as np a = np.arange(24) a.ndim # now reshape it b = a.reshape(2,4,3) print b # b is having three dimensions
L’output è il seguente:
[[[ 0, 1, 2] [ 3, 4, 5] [ 6, 7, 8] [ 9, 10, 11]] [[12, 13, 14] [15, 16, 17] [18, 19, 20] [21, 22, 23]]]
numpy.itemsize
Questo attributo dell’array restituisce la lunghezza di ciascun elemento dell’array in byte.
Esempio 1
# dtype of array is int8 (1 byte) import numpy as np x = np.array([1,2,3,4,5], dtype = np.int8) print x.itemsize
L’output è il seguente:
1
Esempio 2
# dtype of array is now float32 (4 bytes) import numpy as np x = np.array([1,2,3,4,5], dtype = np.float32) print x.itemsize
L’output è il seguente:
4
Rubintine di Creazione di Array
numpy.empty
Crea una matrice non inizializzata di forma specificata e dtype. Utilizza il seguente costruttore
numpy.empty(shape, dtype = float, order = 'C')
Il costruttore ha i seguenti parametri.
Sr. No. | Parametro & Descrizione |
---|---|
1 | La forma Forma di una matrice vuota int o tupla di int |
2 | Il tipo di tipo Tipo di dati di output desiderati. Opzionale di opzione |
Il terzo | Ordine di ordinazione ‘C’ per l’array di file di serie in stile C, ‘F’ per l’array di colonna-maggiore in stile FORTRAN |
Esempio
Il codice seguente mostra un esempio di un array vuoto.
import numpy as np x = np.empty([3,2], dtype = int) print x
L’output è il seguente:
[[22649312 1701344351] [1818321759 1885959276] [16779776 156368896]]
Nota: gli elementi in un array mostrano valori casuali poiché non vengono inizializzati.
numpy.zeros
Restituisce una nuova gamma di dimensioni specificate, riempite con zeri.
numpy.zeros(shape, dtype = float, order = 'C')
Il costruttore prende i seguenti parametri.
Sr. No. | Parametro & Descrizione |
---|---|
1 | La forma Forma di una matrice vuota int o sequenza di int |
2 | Il tipo di tipo Tipo di dati di output desiderati. Opzionale di opzione |
Il terzo | Ordine di ordinazione ‘C’ per l’array di file di serie in stile C, ‘F’ per l’array di colonna-maggiore in stile FORTRAN |
Esempio 1
# array of five zeros. Default dtype is float import numpy as np x = np.zeros(5) print x
L’output è il seguente:
[ 0. 0. 0. 0. 0.]
Esempio 2
# custom type import numpy as np x = np.zeros((2,2), dtype = [('x', 'i4'), ('y', 'i4')]) print x
Dovrebbe produrre il seguente output
[[(0,0)(0,0)] [(0,0)(0,0)]]
numpy.ones
Restituisce una nuova gamma di dimensioni e tipo specificate, riempito con quelle.
numpy.ones(shape, dtype = None, order = 'C')
Il costruttore prende i seguenti parametri.
Sr. No. | Parametro & Descrizione |
---|---|
1 | La forma Forma di una matrice vuota int o tupla di int |
2 | Il tipo di tipo Tipo di dati di output desiderati. Opzionale di opzione |
Il terzo | Ordine di ordinazione ‘C’ per l’array di file di serie in stile C, ‘F’ per l’array di colonna-maggiore in stile FORTRAN |
Esempio 1
# array of five ones. Default dtype is float import numpy as np x = np.ones(5) print x
L’output è il seguente:
[ 1. 1. 1. 1. 1.]
Esempio 2
import numpy as np x = np.ones([2,2], dtype = int) print x
Ora, l’output sarebbe il seguente:
[[1 1] [1 1]]
Letture Correlate
- Apprendimento automatico: confronto tra Random Forest e albero decisionale
- Come funziona l’intelligenza artificiale (AI) e le sue applicazioni
- Python innoverà il modo in cui lavorano gli analisti di dati in Excel
- Esempio di Machine Learning con Python: la Regressione lineare multipla
- Python e i metodi avanzati, le dunder functions per una migliore programmazione
- Librerie Python incredibili, ma poco conosciute
Ercole Palmeri