Guida agli array in Python

Guida agli array in Python

Introduzione

Immagina di avere una playlist delle tue canzoni preferite sul tuo telefono. Questa playlist è un elenco in cui ogni brano è posizionato in un ordine specifico. Puoi riprodurre la prima canzone, passare alla seconda, alla quinta e così via. Questa playlist è molto simile a un array nella programmazione del computer.

Gli array rappresentano una delle strutture dati più fondamentali e ampiamente utilizzate.

In sostanza, un array è un modo strutturato per memorizzare più elementi (come numeri, caratteri o anche altri array) in un ordine specifico e puoi accedere, modificare o rimuovere rapidamente qualsiasi elemento se ne conosci la posizione (indice).

In questa guida ti forniremo una panoramica completa della struttura dei dati dell'array. Innanzitutto vediamo cosa sono gli array e quali sono le loro caratteristiche principali. Passeremo quindi al mondo di Python, esplorando come gli array vengono implementati, manipolati e applicati in scenari del mondo reale.

Comprensione della struttura dei dati dell'array

Gli array sono tra le strutture dati più antiche e fondamentali utilizzate nell'informatica e nella programmazione. La loro semplicità, combinata con la loro efficienza in determinate operazioni, li rende un argomento fondamentale per chiunque si addentri nel campo della gestione e manipolazione dei dati.

Un array è una raccolta di elementi, tipicamente di tipo stesso tipo, immagazzinato locazioni di memoria contigue.

Questa archiviazione contigua consente agli array di fornire accesso in tempo costante a qualsiasi elemento, dato il suo indice. Ogni elemento in un array è chiamato an elementoe la posizione di un elemento nell'array è definita da its Index, che di solito inizia da zero.

Consideriamo ad esempio un array di numeri interi: [10, 20, 30, 40, 50]. Ecco, l'elemento 20 ha un indice di 1:

indicizzazione dell'array Python

Ci sono molteplici vantaggi di utilizzare array per memorizzare i nostri dati. Ad esempio, a causa del layout della memoria, gli array consentono O (1) Complessità temporale (costante) quando si accede a un elemento tramite il suo indice. Ciò è particolarmente vantaggioso quando abbiamo bisogno di un accesso casuale agli elementi. Inoltre, gli array vengono archiviati in locazioni di memoria contigue, che può portare a una migliore posizione della cache e a miglioramenti generali delle prestazioni in determinate operazioni. Un altro notevole vantaggio derivante dall'utilizzo degli array è che, poiché gli array hanno una dimensione fissa una volta dichiarati, è più semplice gestire la memoria ed evitare overflow imprevisti o errori di memoria insufficiente.

Note:: Le matrici sono particolarmente utili negli scenari in cui la dimensione della collezione è nota in anticipo e rimane costanteo dove l'accesso casuale è più frequente degli inserimenti e delle eliminazioni.

D'altro canto, gli array vengono forniti con il proprio set di file limiti. Uno dei limiti principali degli array tradizionali è la loro taglia unica. Una volta creato un array, la sua dimensione non può essere modificata. Ciò può portare a problemi come lo spreco di memoria (se l'array è troppo grande) o la necessità di ridimensionarlo (se l'array è troppo piccolo). Oltre a ciò, l'inserimento o l'eliminazione di un elemento al centro di un array richiede lo spostamento degli elementi, portando a O (n) complessità temporale di queste operazioni.

Per riassumere, illustriamo le principali caratteristiche degli array utilizzando l'esempio della playlist di brani dall'inizio di questa guida. Un array è una struttura dati che:

  • È indicizzato: Proprio come ogni brano della tua playlist ha un numero (1, 2, 3, ...), ogni elemento di un array ha un indice. Nella maggior parte dei linguaggi di programmazione, tuttavia, l'indice inizia da 0. Pertanto, il primo elemento si trova nell'indice 0, il secondo nell'indice 1 e così via.

  • Ha dimensioni fisse: quando crei una playlist per, ad esempio, 10 brani, non puoi aggiungere un undicesimo brano senza prima rimuoverne uno. Allo stesso modo, gli array hanno una dimensione fissa. Una volta creato un array di una certa dimensione, non puoi aggiungere più elementi della sua capacità.

  • È omogeneo: tutti i brani nella playlist sono brani musicali. Allo stesso modo, tutti gli elementi di un array sono dello stesso tipo. Se disponi di un array di numeri interi, non puoi memorizzarvi improvvisamente una stringa di testo.

  • Ha accesso diretto: Se desideri ascoltare la settima canzone della tua playlist, puoi passare direttamente ad essa. Allo stesso modo, con gli array, puoi accedere immediatamente a qualsiasi elemento se ne conosci l'indice.

  • Memoria contigua: Questo è un po' più tecnico. Quando un array viene creato nella memoria di un computer, occupa un blocco continuo di memoria. Pensala come una fila di armadietti adiacenti a scuola. Ogni armadietto è accanto all'altro, senza spazi vuoti in mezzo.

Python e array

Python, noto per la sua flessibilità e facilità d'uso, offre diversi modi per lavorare con gli array. Sebbene Python non disponga di una struttura dati array nativa come alcuni altri linguaggi, fornisce potenti alternative che possono funzionare in modo simile e persino offrire funzionalità estese.

A prima vista, Elenco di Python potrebbe sembrare sinonimo di array, ma ci sono sottili differenze e sfumature da considerare:

Lista Italia
Una struttura dati Python incorporata Non nativi in ​​Python: provengono dal modulo `array`
Dimensione dinamica Dimensione fissa (predefinita).
Può contenere elementi di diversi tipi di dati Conserva oggetti dello stesso tipo
Fornire una gamma di metodi integrati per la manipolazione È necessario importare moduli esterni
O(1) complessità temporale per le operazioni di accesso O(1) complessità temporale per le operazioni di accesso
Consumare più memoria Più efficiente in termini di memoria

Osservando questa tabella viene spontaneo chiedersi: "Quando usare quale?". Bene, se hai bisogno di una raccolta che possa crescere o ridursi dinamicamente e che possa contenere tipi di dati misti, l'elenco di Python è la strada da percorrere. Tuttavia, per gli scenari che richiedono una raccolta più efficiente in termini di memoria con elementi dello stesso tipo, potresti prendere in considerazione l'utilizzo di Python array modulo o librerie esterne come NumPy.

Il schieramento Modulo in Python

Quando la maggior parte degli sviluppatori pensa agli array in Python, spesso per impostazione predefinita pensa agli elenchi. Tuttavia, Python offre una struttura di array più specializzata attraverso il suo built-in array modulo. Questo modulo fornisce un'archiviazione efficiente in termini di spazio dei tipi di dati di base in stile C in Python.

Sebbene gli elenchi Python siano incredibilmente versatili e possano memorizzare qualsiasi tipo di oggetto, a volte possono essere eccessivi, soprattutto quando è necessario memorizzare solo una raccolta di tipi di dati di base, come numeri interi o float. IL array Il modulo fornisce un modo per creare array che sono più efficienti in termini di memoria rispetto agli elenchi per tipi di dati specifici.

Creazione di una matrice

Per utilizzare l' array modulo, devi prima importarlo:

from array import array

Una volta importato, puoi creare un array utilizzando il file array() costruttore:

arr = array('i', [1, 2, 3, 4, 5])
print(arr)

Qui, il 'i' L'argomento indica che l'array memorizzerà Signed interi. Sono disponibili molti altri codici tipo, ad esempio 'f' per galleggianti e 'd' per il doppio.

Accesso e modifica degli elementi

Puoi accedere e modificare gli elementi in un array proprio come faresti con un elenco:

print(arr[2]) 

E ora modifichiamo l'elemento cambiando il suo valore in 6:

arr[2] = 6
print(arr) 

Metodi di matrice

Il array Il modulo fornisce diversi metodi per manipolare gli array:

  • append() – Aggiunge un elemento alla fine dell'array:

    arr.append(7)
    print(arr) 
  • extend() – Aggiunge elementi iterabili alla fine:

    arr.extend([8, 9])
    print(arr) 
  • pop() – Rimuove e restituisce l'elemento nella posizione specificata:

    arr.pop(2)
    print(arr) 
  • remove(): Rimuove la prima occorrenza del valore specificato:

    arr.remove(2)
    print(arr) 
  • reverse(): Inverte l'ordine dell'array:

    arr.reverse()
    print(arr) 

Nota: Esistono più metodi di quelli elencati qui. Fare riferimento al documentazione ufficiale di Python per visualizzare un elenco di tutti i metodi disponibili nel file array modulo.

Mentre l' array offre un modo più efficiente in termini di memoria per archiviare tipi di dati di base, è essenziale ricordarlo limiti. A differenza delle liste, gli array lo sono omogeneo. Ciò significa che tutti gli elementi dell'array devono essere dello stesso tipo. Inoltre, puoi solo archiviare tipi di dati di base in stile C negli array. Se devi archiviare oggetti personalizzati o altri tipi Python, dovrai utilizzare un elenco o un'altra struttura dati.

Array NumPy

NumPy, abbreviazione di Numerical Python, è un pacchetto fondamentale per i calcoli numerici in Python. Una delle sue caratteristiche principali è la sua potenza Oggetto array N-dimensionale, che offre operazioni veloci sugli array, inclusa la manipolazione matematica, logica, della forma e altro ancora.

Gli array NumPy sono più versatili di quelli integrati di Python array modulo e sono un punto fermo nei progetti di scienza dei dati e apprendimento automatico.

Perché utilizzare gli array NumPy?

La prima cosa che mi viene in mente è performance. Gli array NumPy sono implementati in C e consentono un'archiviazione di memoria efficiente e operazioni più veloci grazie ad algoritmi ottimizzati e ai vantaggi dell'archiviazione di memoria contigua.

Mentre gli elenchi e gli array integrati di Python sono unidimensionali, gli array NumPy possono esserlo multidimensionale, rendendoli ideali per rappresentare matrici o tensori.

Dai un'occhiata alla nostra guida pratica e pratica per l'apprendimento di Git, con le migliori pratiche, gli standard accettati dal settore e il cheat sheet incluso. Smetti di cercare su Google i comandi Git e in realtà imparare esso!

Infine, NumPy fornisce a vasta gamma di funzioni per operare su questi array, dall'aritmetica di base alle operazioni matematiche avanzate, rimodellamento, divisione e altro ancora.

Nota: Quando si conosce in anticipo la dimensione dei dati, la preallocazione della memoria per gli array (specialmente in NumPy) può portare a miglioramenti delle prestazioni.

Creazione di un array NumPy

Per utilizzare NumPy, devi prima installarlo (pip install numpy) e poi importarlo:

import numpy as np

Una volta importato, puoi creare un array NumPy utilizzando il file array() funzione:

arr = np.array([1, 2, 3, 4, 5])
print(arr) 

Puoi anche creare array multidimensionali:

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

Questo ci darà:

[[1 2 3] [4 5 6] [7 8 9]]

Oltre a questi modi di base per creare array, NumPy ci fornisce altri modi intelligenti per creare array. Uno dei quali è il arange() metodo. Crea array con valori che aumentano regolarmente:

arr = np.arange(10)
print(arr) 

Un altro è il linspace() metodo, che crea array con un numero specificato di elementi, distanziati equamente tra i valori iniziali e finali specificati:

even_space = np.linspace(0, 1, 5)
print(even_space) 

Accesso e modifica degli elementi

L'accesso e la modifica degli elementi in un array NumPy è intuitivo:

print(arr[2]) arr[2] = 6
print(arr) 

Fare più o meno lo stesso per gli array multidimensionali:

print(matrix[1, 2]) matrix[1, 2] = 10
print(matrix)

Cambierà il valore dell'elemento nella seconda riga (index 1) e la terza colonna (index 2):

[[1 2 3] [4 5 20] [7 8 9]]

Modifica della forma di un array

NumPy offre molte funzioni e metodi per manipolare e operare sugli array. Ad esempio, puoi utilizzare il file reshape() metodo a modificare la forma di un array. Supponiamo di avere un array semplice:

import numpy as np arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
print("Original Array:")
print(arr) 

E vogliamo rimodellarlo in una matrice 3×4. Tutto quello che devi fare è usare il file reshape() metodo con le dimensioni desiderate passate come argomenti:


reshaped_arr = arr.reshape(3, 4)
print("Reshaped Array (3x4):")
print(reshaped_arr)

Ciò comporterà:

Reshaped Array (3x4):
[[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]]

Moltiplicazione di matrici

Il numpy.dot() il metodo è utilizzato per moltiplicazione della matrice. Restituisce il prodotto scalare di due array. Per gli array unidimensionali, è the prodotto interno degli array. Per gli array bidimensionali, è equivalente a moltiplicazione della matrice, e per ND, è a prodotto sommativo sull'ultimo asse della prima matrice e sul penultimo della seconda matrice.

Vediamo come funziona. Innanzitutto, calcoliamo il prodotto scalare di due array 1-D (il prodotto interno dei vettori):

import numpy as np vec1 = np.array([1, 2, 3])
vec2 = np.array([4, 5, 6])
dot_product_1d = np.dot(vec1, vec2) print("Dot product of two 1-D arrays:")
print(dot_product_1d) 

Ciò comporterà:

Dot product of two 1-D arrays:
32

32 è, infatti, il prodotto interno dei due array – (14 + 25+3*6). Successivamente, possiamo eseguire la moltiplicazione di matrici di due array 2-D:


mat1 = np.array([[1, 2], [3, 4]])
mat2 = np.array([[2, 0], [1, 3]])
matrix_product = np.dot(mat1, mat2) print("Matrix multiplication of two 2-D arrays:")
print(matrix_product) 

Che ci darà:

Matrix multiplication of two 2-D arrays:
[[ 4 6] [10 12]]

Gli array NumPy rappresentano un significativo passo avanti rispetto agli elenchi integrati di Python e al array modulo, in particolare per calcoli scientifici e matematici. La loro efficienza, combinata con le ricche funzionalità fornite dalla libreria NumPy, li rende uno strumento indispensabile per chiunque desideri eseguire operazioni numeriche in Python.

Conclusione

Gli array, una pietra angolare dell'informatica e della programmazione, hanno dimostrato più e più volte il loro valore in varie applicazioni e domini. In Python, questa struttura dati fondamentale, attraverso le sue varie incarnazioni come liste, file array module e i potenti array NumPy offrono agli sviluppatori una combinazione di efficienza, versatilità e semplicità.

In questa guida siamo passati dai concetti fondamentali degli array alle loro applicazioni pratiche in Python. Abbiamo visto come gli array, con la loro natura di memoria contigua, forniscono tempi di accesso rapidi e come gli elenchi dinamici di Python apportano un ulteriore livello di flessibilità. Abbiamo anche approfondito il mondo specializzato di NumPy, dove gli array si trasformano in potenti strumenti per il calcolo numerico.

Timestamp:

Di più da Impilamento