Как исправить ошибку TypeError: нехешируемый тип: ‘numpy.ndarray’

Ошибка TypeError: нехешируемый тип: ‘numpy.ndarray’ обычно возникает, когда вы пытаетесь использовать NumPy ndarray в структуре данных, которая требует хешируемых элементов, таких как словарь или множество.

Воспроизведение ошибки

Выход

В этом примере мы пытаемся использовать массив NumPy в качестве ключа словаря.

Numpy.ndarray имеет такие свойства, как форма, размер, ndim, dtype, data и dsize. Используя эти свойства, вы можете получить доступ к различным аспектам массива и изменить их.

Массивы NumPy являются изменяемыми объектами и, следовательно, не могут использоваться в качестве ключей словаря или элементов набора, которые должны быть неизменяемыми.

Поскольку массивы неизменяемы, мы не можем использовать их в качестве ключей словаря; следовательно, мы получаем TypeError.

Как исправить

Вот способы исправить ошибку TypeError: unhashable type: ‘numpy.ndarray’.

Решение 1. Преобразование массива numpy в кортеж

Преобразование массива NumPy в кортеж или список перед его использованием в качестве ключа словаря или элемента набора устранит ошибку TypeError.

Используйте функцию tuple() для преобразования массива в кортеж в Python.

Выход

В этом примере мы преобразовали массив в хешируемый кортеж и использовали этот кортеж в качестве ключа к словарю, который не выдает ошибку, и устранили ошибку.

Решение 2. Используйте hashable в качестве ключа

Когда вы используете словарь или набор в Python, ключи или элементы должны быть хешируемыми объектами. Используйте другой тип объекта в качестве ключа или элемента. Например:

  1. Строки
  2. Целые числа
  3. Кортежи неизменяемых элементов (например, строк или целых чисел)

Выход

Этот код использует целочисленный тип данных в качестве ключа к словарю, что полностью позволяет избежать ошибки TypeError.

Решение 3. Используйте собственный класс, определяющий __hash__ и __eq__

Если есть необходимость использовать массив NumPy в качестве ключа в словаре и вы не можете преобразовать его в кортеж или список, определите собственный класс, реализующий методы __hash__ и __eq__. Методы __hash__ и __eq__ позволяют вам определить, как должны хешироваться объекты.

Это решение встречается редко, и я рекомендую вам не использовать его без необходимости.

Выход

Оцените статью

Автор статей и разработчик, делюсь знаниями.

Программирование на Python