Appiattimento degli Array
Appiattire un array significa convertirlo da un array multidimensionale in un array 1D, essenzialmente srotolando il suo contenuto.
Questa operazione è utile quando è necessario elaborare gli elementi di un array uno per uno o quando si desidera rendere i dati più adatti a determinati algoritmi.
Ci sono tre opzioni possibili per appiattire in NumPy:
Utilizzando il metodo
ndarray.reshape(-1)
o la funzionenumpy.reshape(array, -1)
;Utilizzando il metodo
ndarray.ravel()
o la funzionenumpy.ravel(array)
;Utilizzando il metodo
ndarray.flatten()
.
reshape(-1)
Il metodo .reshape(-1)
o la funzione reshape(array, -1)
restituirà un array appiattito contiguo con lo stesso numero di elementi.
Come abbiamo già menzionato nel capitolo precedente, -1
calcola automaticamente la dimensione della dimensione basandosi sulla dimensione originale dell'array. Poiché passiamo solo un singolo intero per shape
, viene restituito un array 1D con lo stesso numero di elementi.
import numpy as np array_2d = np.array([[1, 2, 3], [4, 5, 6]]) flattened_array = array_2d.reshape(-1) print(f'Flatenned array: {flattened_array}') # Changing the first element of flattened_array flattened_array[0] = 10 print(f'Modified initial array:\n{array_2d}')
Il metodo .reshape()
o la rispettiva funzione restituisce una vista dell'array originale, quindi qualsiasi modifica apportata all'array rimodellato influenzerà anche l'array originale.
Usare flattened_array = np.reshape(array_2d, -1)
può essere utilizzato invece di chiamare il metodo.
ravel()
Il metodo ndarray.ravel()
o la funzione numpy.ravel(array)
funziona allo stesso modo di reshape(-1)
e restituisce anche una vista dell'array originale:
import numpy as np array_2d = np.array([[1, 2, 3], [4, 5, 6]]) flattened_array = array_2d.ravel() print(f'Flatenned array: {flattened_array}') # Changing the first element of flattened_array flattened_array[0] = 10 print(f'Modified initial array:\n{array_2d}')
flattened_array = np.ravel(array_2d)
può essere utilizzato invece di chiamare il metodo.
ndarray.flatten()
Nel caso in cui si desideri una copia dell'array originale, non una vista, è possibile utilizzare il metodo .flatten()
:
import numpy as np array_2d = np.array([[1, 2, 3], [4, 5, 6]]) flattened_array = array_2d.flatten() print(f'Flatenned array: {flattened_array}') # Changing the first element of flattened_array flattened_array[0] = 10 print(f'Initial array:\n{array_2d}')
Nota
Puoi sempre copiare una vista di un array per creare un oggetto separato e modificare questa copia senza influenzare l'array originale.
Swipe to start coding
-
Usa correttamente il metodo
.flatten()
per appiattireexam_scores
e memorizza il risultato inexam_scores_flattened
. -
Usa correttamente il metodo
.reshape()
per appiattireexam_scores
e memorizza il risultato inexam_scores_reshaped
. -
Usa il metodo
.ravel()
per appiattireexam_scores
e memorizza il risultato inexam_scores_raveled
. -
Tra i tre array appiattiti creati, scegli quello che è una copia dell'array originale, non una vista, e assegna
100
al suo primo elemento (usa l'indicizzazione positiva).
Soluzione
Grazie per i tuoi commenti!