Python Hashable
Primeiro precisamos entender os objetos de Hashable de Python antes de resolver este erro. No Python, um objeto hashable refere -se a um objeto cujo valor não muda uma vez definido e pode ser representado como um valor de hash único usando a função hash (). Embora muito relacionável, hashable não significa necessariamente que o objeto é imutável. Isso significa que todo objeto imutável no python é hashable, mas nem todos os objetos hashable são imutáveis.
Exemplos de objetos mutáveis em Python incluem int, carros alegóricos, STR e tuplas. Outros tipos, como dicionários, conjuntos e listas, são ilegais.
Python Check Hashable
Python nos fornece a função hash () para verificar se um objeto é hashable.
Por exemplo:
# verifique se hashableUsamos a função hash () com um objeto de string no trecho acima. Se o objeto fornecido for hashable, a função deve retornar um valor de hash único, como mostrado:
-2672783941716432156No entanto, se executarmos a função hash () com um tipo não lavável, o erro “TypeError: não lavável:” é gerado.
Um exemplo é como mostrado no código abaixo:
print (hash ('key': 'value')))Como um dicionário de Python é ilegal, o código acima deve retornar o erro como mostrado:
TypeError: Unedable Type: 'Numpy.ndarray '
Existem três cenários principais em que podemos receber esse erro no Numpy. Esses incluem:
Usando o Numpy Array como uma chave
Somente objetos hashable podem ser usados como chaves para um dicionário em python. Como um Numpy Ndarray não é hashable, qualquer tentativa de usá -lo como uma chave em um dicionário resultará em um erro.
Isso é ilustrado como mostrado:
importar numpy como npNeste exemplo, tentamos usar uma matriz Numpy como chave para um dicionário. Isso resulta no erro como mostrado abaixo:
Podemos converter o tipo de dados em um objeto hashable para consertar isso. No nosso caso, converter a matriz em um conjunto faz mais sentido.
arr = np.Array ([1,2,3])Convertemos o ndarray em uma tupla e a atribuímos como a chave.
Adicionando uma matriz Numpy a um conjunto
Tentar adicionar um ndarray a um conjunto também resultará nesse erro. Um exemplo é como mostrado:
arr = np.Array ([1,2,3])Estamos tentando adicionar um ndarray a um conjunto neste caso. Portanto, o código acima deve retornar um erro:
Podemos resolver isso adicionando cada elemento da matriz em vez do objeto de matriz no conjunto.
arr = np.Array ([1,2,3])Isso deve adicionar todos os elementos da matriz ao conjunto.
1, 2, 3Conversão de N-Dimension para definir
Outra instância em que esse erro pode ocorrer é converter uma matriz de dimensão n em um conjunto.
Exemplo:
arr = np.Array ([[1,2,3], [4,5,6]]))O código acima converte uma matriz 2D em um conjunto. Da mesma forma, o código acima resultará em um erro como mostrado:
Você pode resolver este erro acessando os elementos da matriz individualmente.
Resolvido
Este artigo abordou o "TypeError: Tipo não lavável:" Erro em Python, por que ele ocorre e como corrigi -lo em nosso código Numpy.
Te vejo na próxima!!