Løst “Typeerror Unsashable Type” Numpy.Ndarray

Løst “Typeerror Unsashable Type” Numpy.Ndarray
Feil er brødet og smøret i hver programmerers liv. Du vil støte på feil uansett hvilket språk, verktøy eller prosjekt du jobber med. Når du jobber med Python, er en feil du kan møte feilen "Typeerror: Unsashable Type". Ved hjelp av denne guiden vil vi forstå hvorfor denne feilen skjer og hva vi kan gjøre for å fikse den i koden vår.

Python hashable

Vi må først forstå Pythons hashable objekter før vi løser denne feilen. I Python refererer et hashabelt objekt til et objekt hvis verdi ikke endres en gang definert og kan representeres som en unik hasjverdi ved bruk av hash () -funksjonen. Selv om det er veldig relatert, betyr ikke hashable nødvendigvis at objektet er uforanderlig. Dette betyr at hvert uforanderlig objekt i Python er hasbar, men ikke alle hashable objekter er uforanderlige.

Eksempler på mutable objekter i Python inkluderer Int, Floats, Str og tuples. Andre typer, for eksempel ordbøker, sett og lister, er uhensiktsmessige.

Python sjekk hashable

Python gir oss hasj () -funksjonen for å sjekke om et objekt er hashabelt.

For eksempel:

# sjekk om hashable
trykk (hash ('linuxhint'))

Vi bruker hash () -funksjonen med et strengobjekt i ovennevnte utdrag. Hvis det medfølgende objektet er hashbart, bør funksjonen returnere en unik hasjverdi som vist:

-2672783941716432156

Imidlertid, hvis vi kjører hasj () -funksjonen med en uhindrende type, genereres "typenerror: uhashable type:" feil.

Et eksempel er som vist i koden nedenfor:

print (hash ('nøkkel': 'verdi'))

Siden en Python -ordbok er uhindrende, bør koden over returnere feilen som vist:

Typeerror: Ulyselig type: 'Numpy.ndarray '

Det er tre hovedscenarier der vi kan få denne feilen i Numpy. Disse inkluderer:

  1. Ved hjelp av en numpy matrise som en nøkkel til en Python -ordbok.
  2. Legge til en numpy matrise til et sett
  3. Konvertering av n-dimensjonal matrise til et sett.

Bruker Numpy Array som en nøkkel

Bare hashable objekter kan brukes som nøkler til en ordbok i Python. Siden en numpy ndarray ikke er hasbar, vil ethvert forsøk på å bruke den som en nøkkel i en ordbok resultere i en feil.

Dette illustreres som vist:

Importer numpy som NP
arr = np.Array ([1,2,3])
dict = arr: 'verdi'

I dette eksemplet prøver vi å bruke en numpy matrise som en nøkkel til en ordbok. Dette resulterer i feilen som vist nedenfor:

Vi kan konvertere datatypen til et hashabelt objekt for å fikse dette. I vårt tilfelle er det mer fornuftig å konvertere matrisen til et sett.

arr = np.Array ([1,2,3])
# konvertere til tuple
TUP = Tuple (ARR)
# Angi tuple som tast
dict = tup: 'verdi'
trykk (dikter)

Vi konverterer ndarray til en tupel og tildeler den som nøkkelen.

Legge til en numpy matrise til et sett

Å prøve å legge en ndarray til et sett vil også resultere i denne feilen. Et eksempel er som vist:

arr = np.Array ([1,2,3])
s = sett ()
s.Legg til (arr)

Vi prøver å legge en ndarray til et sett i dette tilfellet. Derfor bør koden ovenfor returnere en feil:

Vi kan løse dette ved å legge til hvert array -element i stedet for matriseobjektet i settet.

arr = np.Array ([1,2,3])
s = sett ()
for jeg i arr:
s.Legg til (i)
trykk (er)

Dette skal legge alle elementene i matrisen til settet.

1, 2, 3

N-dimensjonskonvertering til sett

En annen forekomst der denne feilen kan oppstå er å konvertere en n-dimensjonsarray til et sett.

Eksempel:

arr = np.Array ([[1,2,3], [4,5,6]])
s = sett (arr)
trykk (er)

Koden over konverterer en 2D -matrise til et sett. Tilsvarende vil koden over resultere i en feil som vist:

Du kan løse denne feilen ved å få tilgang til elementene i matrisen individuelt.

Løst

Denne artikkelen dekket "Typeerror: Uhashable Type:” Feil i Python, hvorfor den oppstår, og hvordan du fikser den i vår numpy kode.

Vi sees på den neste!!