HOWTO · NumPy

Converti array numpy in tupla

Esistono due metodi principali che possono essere utilizzati per convertire un array NumPy in tuple in Python, la funzione tuple() e la funzione map().

In questa pagina

Converti un array NumPy con la funzione integrata tuple() di Python. Per un array unidimensionale, tuple(array) crea una tupla con i suoi elementi. Per un array bidimensionale, converti anche ogni riga se ti serve una tupla annidata. Gli esempi seguenti mostrano entrambe le strutture e un’alternativa con map().

Convertire un array NumPy 1D in una tupla

tuple() consuma un iterabile e inserisce in una tupla gli elementi che questo restituisce. Iterando su un array NumPy unidimensionale si ottengono i suoi valori; passandolo direttamente a tuple() si ottiene quindi una tupla piatta. L’esempio seguente usa interi NumPy; la loro rappresentazione visualizzata può variare in base alla versione di NumPy.

Esegui questo esempio:

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

import numpy as np

array = np.array([10, 20, 30])
result = tuple(array)
print(result)
(np.int64(10), np.int64(20), np.int64(30))

Convertire un array NumPy 2D in tuple annidate

Iterando su un array bidimensionale si ottengono le righe. Di conseguenza, tuple(matrix) crea una tupla esterna i cui elementi sono ancora array di righe NumPy. Per convertire anche le righe, passa ciascuna a tuple(). In questo modo il risultato mantiene il raggruppamento originale di righe e colonne.

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

import numpy as np

matrix = np.array([[1, 2], [3, 4]])
result = tuple(tuple(row) for row in matrix)
print(result)
((np.int64(1), np.int64(2)), (np.int64(3), np.int64(4)))

La comprensione esegue la conversione interna una volta per ogni riga, poi la tuple() esterna raccoglie le tuple delle righe. La rappresentazione visualizzata degli scalari NumPy può variare in base alla versione.

Usare map() per convertire ogni riga

Puoi esprimere la stessa operazione riga per riga con map(tuple, matrix). In Python, map() restituisce un iteratore, quindi avvolgilo in tuple() per materializzare tutte le righe convertite. È un’alternativa concisa quando l’operazione consiste semplicemente nell’applicare tuple() a ogni riga.

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

import numpy as np

matrix = np.array([[1, 2], [3, 4]])
result = tuple(map(tuple, matrix))
print(result)
((np.int64(1), np.int64(2)), (np.int64(3), np.int64(4)))

Qui map() converte le righe, non i singoli valori scalari. Per convertire ogni elemento puoi usare un’espressione diversa, ad esempio tuple(int(value) for value in array) per convertire in interi Python i valori di un array unidimensionale. La conversione da scegliere dipende dal fatto che tu voglia modificare le righe o i valori.

Scegliere una conversione adatta al risultato che serve

Usa tuple(array) per ottenere una sequenza piatta da un array unidimensionale. Per un array bidimensionale, usa una conversione annidata come tuple(tuple(row) for row in matrix) o l’equivalente con map() se vuoi mantenere ogni riga in una tupla separata. Queste forme conservano il raggruppamento dei valori per riga.

Le tuple non mantengono proprietà dell’array NumPy come l’attributo shape o le operazioni sugli array. L’annidamento riflette le righe convertite, ma non conserva i metadati di forma di NumPy. Appiattire l’array con un suo metodo è facoltativo quando serve un’unica sequenza con tutti i valori: così si perde il raggruppamento per riga. Non è necessario appiattire l’array per creare tuple annidate.

Inoltre, convertire un array in una tupla non garantisce che ogni elemento diventi uno scalare nativo di Python. I valori NumPy possono rimanere oggetti scalari NumPy. Applica una conversione esplicita come int() solo se il codice successivo richiede quel tipo, scegliendo una conversione adatta ai valori effettivi. La rappresentazione visualizzata degli scalari NumPy può variare in base alla versione.