关于 np.float 被删除的问题
1. 概述
在Numpy 1.24版本中,删除了像np.float
、np.int
这样的 Python 内置类型的 alias,因此以后在代码中使用这些类型会报错AttributeError: module 'numpy' has no attribute 'float'
, 涉及的类型包括:
numpy.bool
numpy.int
numpy.float
numpy.complex
numpy.object
numpy.str
numpy.long
numpy.unicode
那该怎么解决这个错误呢?
TL;DR
- 对于在标量上的操作,直接使用Python内置类型替换
1
2
3
4
5foo = np.random.rand(10)
# 原先用法,注意foo[0]是一个标量
bar = np.float(foo[0])
# 新用法
bar = float(foo[0]) - 对于在
np.ndarray
上的操作,使用np.float64
或np.float32
来替代,具体选择哪个需要自己根据情况来确定,不同类型精度会有不同,下面举两个例子:1
2
3
4
5
6
7
8
9# 原先用法
foo = np.random.rand(10, dtype=np.float)
# 新用法
foo = np.random.rand(10, dtype=np.float32)
# 原先用法
foo = np.random.rand(10).astype(np.float)
# 新用法
foo = np.random.rand(10).astype(np.float32)
这里列出来了删除类型在标量和np.ndarray
上的替代,方便查找
原先类型 | 标量替换类型 | np.ndarray 替换类型 |
---|---|---|
np.int | int | np.int32/np.int64 |
np.float | float | np.float32/np.float64 |
np.bool | bool | np.bool_ |
np.complex | complex | np.complex128 |
np.object | object | - |
np.str | str | np.str_ |
np.long | int | np.int32/np.int64 |
np.unicode | str | np.str_ |
详细说明参考NumPy 1.20.0 Release Notes。
下面详细说说事情的来龙去脉。