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 hashableVi 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:
-2672783941716432156Imidlertid, 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:
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 NPI 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])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])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])Dette skal legge alle elementene i matrisen til settet.
1, 2, 3N-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]])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!!