Как решить ошибку «numpy» не имеет атрибута «float» в Python?

Я использую numpy==1.24.0. При запуске этой строки кода примера:

import numpy as np
num = np.float(3)

Я получаю эту ошибку:

Traceback (most recent call last):   File "<stdin>", line 1, in <module>   File "/home/ubuntu/.local/lib/python3.8/site-packages/numpy/__init__.py", line 284, in __getattr__
    raise AttributeError("module {!r} has no attribute " AttributeError: module 'numpy' has no attribute 'float'

Пожалуйста помоги мне с этим.

np.float — это устаревший псевдоним встроенной функции float. Чтобы отключить это предупреждение, используйте float отдельно. Это не изменит никакого поведения и безопасно. Если вам нужен именно скалярный тип numpy, используйте здесь np.float64. Устарело в NumPy 1.20; для получения более подробной информации и рекомендаций: numpy.org/devdocs/release/1.20.0-notes.html#deprecations
MattDMo 18.12.2022 21:45

Это был стандартный объект Python float, но, как уже упоминалось, numpy.float устарел... и был удален в версии 1.24. Вы можете использовать float или выбрать один из np.float32, np.float64, np.float128 (это все?!). Второй вариант мне кажется разумным.

tdelaney 18.12.2022 22:09

Так зачем вы используете np.float, если это не работает?

hpaulj 19.12.2022 01:56

@hpaulj: мы используем это для поддержки старой базы кода.

Nawin K Sharma 23.12.2022 07:08

Поскольку np.float устарел и в моей кодовой базе np.float находится в нескольких местах, на данный момент я понизил версию Numpy. Это сработало для меня: pip install numpy == 1.22.4

Nawin K Sharma 26.12.2022 10:44
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
31
5
17 796
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я удалил numpy.py, затем обновил свой numpy, и это сработало! Примечание: пустая версия = 1.23.3

Похоже, np.float был удален в версии 1.24. Наличие собственного файла «numpy.py» вызовет проблему, как вы говорите. Но также может быть, что np.float устарел. Посмотрим, что об этом скажет ОП.

tdelaney 18.12.2022 22:11
Ответ принят как подходящий

Ответ уже есть в комментариях @mattdmo и @tdelaney:

  • numpy 1.20 (примечания к выпуску) устарели numpy.float, numpy.int и подобные псевдонимы, в результате чего они выдают предупреждение об устаревании

  • numpy 1.24 (примечания к выпуску) полностью удалил эти псевдонимы, вызывая ошибку при их использовании

Во многих случаях вы можете просто заменить устаревшие типы numpy эквивалентным встроенным типом Python, например. numpy.float становится «простым» Python float.

Подробные рекомендации по работе с различными устаревшими типами см. в таблице и рекомендациях в примечаниях к выпуску для версии 1.20:

...

Чтобы дать четкое руководство для подавляющего большинства случаев, для типов bool, object, strunicode) использование простой версии короче и понятнее и, как правило, является хорошей заменой. Для float и complex вы можете использовать float64 и complex128, если хотите уточнить точность.

Для np.int прямая замена на np.int_ или int также хороша и не изменит поведение, но точность по-прежнему будет зависеть от компьютера и операционной системы. Если вы хотите быть более точным и просмотреть текущее использование, у вас есть следующие альтернативы:

  • np.int64 или np.int32, чтобы точно указать точность. Это гарантирует, что результаты не будут зависеть от компьютера или операционной системы.
  • np.int_ или int (по умолчанию), но имейте в виду, что это зависит от компьютера и операционной системы.
  • Типы С: np.cint (int), np.int_ (long), np.longlong.
  • np.intp который является 32-битным на 32-битных машинах 64-битным на 64-битных машинах. Это может быть лучший тип для индексации.

...

Если у вас есть зависимости, использующие устаревшие типы, быстрым обходным путем будет откат вашей версии numpy до <1.24 (как предлагается в некоторых других ответах), ожидая, пока зависимость наверстает упущенное. Кроме того, вы можете сами создать патч и открыть запрос на включение или исправить зависимость в своем собственном коде.

В версии 1.24:

Срок устаревания псевдонимов np.object, np.bool, np.float, np.complex, np.str и np.int истек (представляет NumPy 1.20). Некоторые из них теперь будут выдавать FutureWarning в дополнение к ошибке, поскольку в будущем они будут сопоставлены со скалярами NumPy.

pip install "numpy<1.24" чтобы обойти это.

In [1]: import numpy as np

In [2]: np.__version__
Out[2]: '1.23.5'

In [3]: np.float(3)
<ipython-input-3-8262e04d58e1>:1: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.
Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
  np.float(3)
Out[3]: 3.0

Другие вопросы по теме