HOWTO · NumPy
Aggiungere un asse a un array NumPy con numpy.newaxis
Il numpy.newaxis può essere usato per aggiungere una nuova dimensione a un array NumPy in Python.
In questa pagina
numpy.newaxis aggiunge un asse di dimensione uno a un array quando lo si usa in un’espressione di indicizzazione. Inseritelo prima dell’asse esistente per ottenere una riga oppure dopo quell’asse per ottenere una colonna. Per un array monodimensionale con forma (4,), si ottengono rispettivamente (1, 4) e (4, 1). I valori originali mantengono lo stesso ordine: l’indicizzazione modifica la forma dell’array inserendo un asse.
Aggiungere un asse a un array NumPy con numpy.newaxis
In NumPy, numpy.newaxis è un alias dell’oggetto None di Python quando si usa l’indicizzazione. Non è un metodo da chiamare con le parentesi. La documentazione di numpy.newaxis descrive questa costante di indicizzazione. In un indice, array[np.newaxis, :] colloca il nuovo asse all’inizio, mentre array[:, np.newaxis] lo colloca dopo l’asse originale. I due punti mantengono tutti i valori lungo quell’asse.
Eseguite questo esempio dopo aver installato NumPy:
import numpy as np
values = np.array([1, 2, 3, 4])
print(values.shape)
row = values[np.newaxis, :]
column = values[:, np.newaxis]
print(row.shape)
print(column.shape)
(4,)
(1, 4)
(4, 1)
La prima forma descrive un asse con quattro elementi. Nella forma a riga, il nuovo asse iniziale ha lunghezza uno e l’asse originale mantiene lunghezza quattro. Nella forma a colonna, l’asse originale con quattro elementi viene prima e il nuovo asse ha lunghezza uno. Ecco perché le forme sono (1, 4) e (4, 1): gli elementi della forma seguono l’ordine degli assi e non indicano un insieme diverso di valori. Una forma a due dimensioni non trasforma di per sé i dati in un tipo speciale di matrice: NumPy li rappresenta comunque come un array.
Gli stessi due indici si possono scrivere con None: values[None, :] crea la forma a riga e values[:, None] quella a colonna. Scegliete la notazione che rende più chiaro il codice circostante. numpy.newaxis può aggiungere un asse anche ad array che hanno già più dimensioni. La posizione nell’indice determina dove comparirà il nuovo asse di dimensione uno nella forma risultante; prima di usare l’array in un’operazione successiva, confrontate quindi le posizioni nell’indice con quelle nella forma.
Aggiungere un asse è utile quando un’altra operazione richiede dimensioni compatibili, anche in alcune operazioni di broadcasting. L’asse aggiunto ha lunghezza uno e il broadcasting può estenderlo se le altre dimensioni sono compatibili; aggiungerlo non rende automaticamente compatibile qualsiasi coppia di array. Per scegliere tra la forma a riga e quella a colonna, considerate prima la forma risultante e l’ordine degli assi richiesto dall’operazione successiva. Così l’indicizzazione resta facile da interpretare e si evita di presumere che le due forme siano intercambiabili.
Per un array con forma (2, 3), matrix[:, :, None] aggiunge un asse alla fine e produce la forma (2, 3, 1), mentre matrix[None, :, :] ne aggiunge uno all’inizio e produce (1, 2, 3). In entrambi i casi, i due assi originali mantengono il loro ordine e le loro lunghezze. Quando usate più posizioni nell’indice, annotate la forma originale e segnate dove compare ogni None o numpy.newaxis: così potete prevedere la nuova forma prima di passare l’array a un’altra funzione.