【问题标题】:How can I solve error "module 'numpy' has no attribute 'float'" in Python?如何解决 Python 中的错误 \"module \'numpy\' has no attribute \'float\'\"?
【发布时间】:2023-02-24 03:57:50
【问题描述】:

我正在使用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
  • 这是标准的 python float 对象,但如前所述,numpy.float 已被弃用......并在 1.24 中删除。您可以使用 float 或选择 np.float32np.float64np.float128 之一(是所有这些吗?!)。第二种选择对我来说似乎是合理的。
  • 那么,如果它不起作用,你为什么要使用np.float
  • @hpaulj:我们正在使用它来维护旧代码库。
  • 由于 np.float 已被弃用并且在我的代码库中,np.float 在多个地方,现在我降级了 Numpy 版本。这对我有用:pip install numpy==1.22.4

标签: python numpy


【解决方案1】:

@mattdmo@tdelaney 已经在 cmets 中提供了答案:

  • 麻木的1.20(release notes) deprecated numpy.floatnumpy.int 和类似的别名,导致它们发出弃用警告

  • 麻木的1.24(release notes) 完全删除了这些别名,导致错误当他们被使用

在许多情况下,您可以简单地用等效的 Python 内置类型替换已弃用的 numpy 类型,例如numpy.float 成为“普通”Python float

有关如何处理各种弃用类型的详细指南,请仔细查看 release notes for 1.20 中的表格和指南:

...

为绝大多数情况提供明确的指导,对于类型boolobjectstr(和unicode),使用普通版本更短更清晰,通常是一个很好的替代品。对于floatcomplex,如果您想更明确地说明精度,可以使用float64complex128

对于 np.int,直接替换为 np.int_int 也很好,不会改变行为,但精度将继续取决于计算机和操作系统。如果您想更明确地查看当前使用情况,您有以下选择:

  • np.int64np.int32 以准确指定精度。这确保了结果不会依赖于计算机或操作系统。
  • np.int_int(默认值),但请注意,这取决于计算机和操作系统。
  • C 类型:np.cint (int)、np.int_ (long)、np.longlong
  • np.intp 在 32 位机器上是 32 位,在 64 位机器上是 64 位。这可能是用于索引的最佳类型。

...

如果您有使用已弃用类型的依赖项,一个快速的解决方法是将您的 numpy 版本回滚到 &lt;1.24(如其他一些答案中所建议的),同时等待依赖项赶上。或者,您可以自己创建一个补丁并打开一个拉取请求,或者在您自己的代码中对依赖项进行猴子修补。

【讨论】:

    【解决方案2】:

    在 1.24 版本中:

    别名 np.object、np.bool、np.float、np.complex、np.str 和 np.int 的弃用已过期(引入 NumPy 1.20)。其中一些现在除了引发错误外还会给出 FutureWarning,因为它们将来会映射到 NumPy 标量。

    pip install "numpy&lt;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
    

    【讨论】:

      【解决方案3】:

      我删除了 numpy.py 然后更新了我的 numpy 并且它起作用了!
      注意:numpy 版本=1.23.3

      【讨论】:

      • 看起来 np.float 在 1.24 版本中被删除了。拥有自己的“numpy.py”文件会导致您所说的问题。但也可能是 np.float 已被弃用。我们必须看看 OP 对此有何评论。
      猜你喜欢
      • 2023-02-17
      • 2022-12-04
      • 2022-06-21
      • 1970-01-01
      • 2022-11-07
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多