Resolvido TypeError ilencável tipo Numpy.Ndarray

Resolvido TypeError ilencável tipo Numpy.Ndarray
Erros são o pão e a manteiga na vida de cada programador. Você encontrará erros, independentemente do idioma, ferramenta ou projeto em que está trabalhando. Ao trabalhar com Python, um erro que você pode encontrar é o erro "TypeError: Type não lavável". Usando este guia, entenderemos por que esse erro acontece e o que podemos fazer para corrigi -lo em nosso código.

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 hashable
Imprimir (hash ('Linuxhint')))

Usamos 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:

-2672783941716432156

No 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:

  1. Usando uma matriz Numpy Como chave para um dicionário de Python.
  2. Adicionando uma matriz Numpy para um conjunto
  3. Conversão de matriz n-dimensional para um conjunto.

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 np
arr = np.Array ([1,2,3])
dict = arr: 'value'

Neste 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])
# converta para tupla
tup = tupla (arr)
# Defina a tupla como chave
dict = tup: 'value'
impressão (dicto)

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])
s = set ()
s.Adicionar (arr)

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])
s = set ()
para eu em arr:
s.adicione (i)
Impressão (s)

Isso deve adicionar todos os elementos da matriz ao conjunto.

1, 2, 3

Conversã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]]))
s = set (arr)
Impressão (s)

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!!