Risoluto typeerror nonshable tipo numpy.Ndarray

Risoluto typeerror nonshable tipo numpy.Ndarray
Gli errori sono il pane e il burro nella vita di ogni programmatore. Si imbatterai in errori, indipendentemente dal linguaggio, allo strumento o al progetto a cui stai lavorando. Quando si lavora con Python, un errore che potresti riscontrare è l'errore "TypeEerror: non aspirabile". Usando questa guida, capiremo perché questo errore accade e cosa possiamo fare per risolverlo nel nostro codice.

Python Hashable

Per prima cosa dobbiamo capire gli oggetti hashable di Python prima di risolvere questo errore. In Python, un oggetto hashable si riferisce a un oggetto il cui valore non cambia una volta definito e può essere rappresentato come un valore di hash univoco usando la funzione hash (). Sebbene molto riconoscibile, Hashable non significa necessariamente che l'oggetto sia immutabile. Ciò significa che ogni oggetto immutabile in Python è hashable, ma non tutti gli oggetti hashable sono immutabili.

Esempi di oggetti mutabili in Python includono int, galleggianti, str e tuple. Altri tipi, come dizionari, set ed elenchi, sono danneggiabili.

Python Check hashable

Python ci fornisce la funzione hash () per verificare se un oggetto è hashable.

Per esempio:

# Controlla se hashable
Stampa (hash ('LinuxHint'))

Usiamo la funzione hash () con un oggetto stringa nello snippet sopra. Se l'oggetto fornito è hashable, la funzione dovrebbe restituire un valore di hash unico come mostrato:

-2672783941716432156

Tuttavia, se eseguiamo la funzione Hash () con un tipo non povero, l'errore "TAYEERROR: non insalabile:" viene generato l'errore.

Un esempio è come mostrato nel codice seguente:

print (hash ('key': 'value')

Poiché un dizionario di Python non è inasbabile, il codice sopra dovrebbe restituire l'errore come mostrato:

TAYEERROR: Tipo non povero: 'Numpy.ndarray '

Ci sono tre scenari principali in cui possiamo ottenere questo errore in numpy. Questi includono:

  1. Usando un array numpy Come chiave per un dizionario Python.
  2. Aggiunta di un array numpy a un set
  3. Conversione di array n-dimensionale a un set.

Usando l'array numpy come chiave

Solo gli oggetti hashable possono essere usati come chiavi di un dizionario in Python. Poiché un Numpy Ndarray non è hashable, qualsiasi tentativo di usarlo come chiave in un dizionario comporterà un errore.

Questo è illustrato come mostrato:

Importa Numpy come NP
arr = np.Array ([1,2,3])
Dict = arr: 'Value'

In questo esempio, cerchiamo di usare un array numpy come chiave per un dizionario. Ciò si traduce nell'errore come mostrato di seguito:

Possiamo convertire il tipo di dati in un oggetto hashable per correggere questo. Nel nostro caso, convertire l'array in un set ha più senso.

arr = np.Array ([1,2,3])
# Converti in tupla
tup = tuple (arr)
# Imposta tuple come chiave
dict = tup: 'valore'
Stampa (dict)

Convertiamo il ndarray in una tupla e lo assegniamo come chiave.

Aggiunta di un array numpy a un set

Il tentativo di aggiungere un NdArray a un set comporterà anche questo errore. Un esempio è come mostrato:

arr = np.Array ([1,2,3])
s = set ()
S.Aggiungi (arr)

Stiamo tentando di aggiungere un ndarray a un set in questo caso. Pertanto, il codice sopra dovrebbe restituire un errore:

Possiamo risolverlo aggiungendo ogni elemento array anziché l'oggetto array nel set.

arr = np.Array ([1,2,3])
s = set ()
per me in arr:
S.Aggiungi (i)
stampare (i)

Questo dovrebbe aggiungere tutti gli elementi dell'array al set.

1, 2, 3

Conversione di dimensione n su set

Un'altra istanza in cui può verificarsi questo errore è la conversione di un array N-dimensione in un set.

Esempio:

arr = np.Array ([[1,2,3], [4,5,6]])
S = set (arr)
stampare (i)

Il codice sopra converte un array 2D in un set. Allo stesso modo, il codice sopra si tradurrà in un errore come mostrato:

È possibile risolvere questo errore accedendo singolarmente agli elementi dell'array.

Risolto

Questo articolo ha coperto il tipo "TypeEerror: non insalabile:" Errore in Python, perché si verifica e come risolverlo nel nostro codice numpy.

Ci vediamo alla prossima!!