基本信息
文件名称:python编程学习np.float被删除的问题解析.docx
文件大小:17.87 KB
总页数:5 页
更新时间:2025-06-14
总字数:约3.22千字
文档摘要

python编程学习np.float被删除的问题解析

目录1.概述2.代码验证3.Why4.带来的影响

1.概述

在Numpy1.24版本中,删除了像np.float、这样的Python内置类型的alias,因此以后在代码中使用这些类型会报错AttributeError:modulenumpyhasnoattributefloat,涉及的类型包括:

numpy.bool

numpy.float

plex

numpy.object

numpy.str

numpy.long

numpy.unicode

那该怎么解决这个错误呢?

TL;DR

对于在标量上的操作,直接使用Python内置类型替换

foo=np.random.rand(10)

#原先用法,注意foo[0]是一个标量

bar=np.float(foo[0])

#新用法

bar=float(foo[0])

对于在np.ndarray上的操作,使用np.float64或np.float32来替代,具体选择哪个需要自己根据情况来确定,不同类型精度会有不同,下面举两个例子:

#原先用法

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替换类型32/64np.floatfloatnp.float32/np.float64np.boolboolnp.bool_plex128np.objectobject-np.strstrnp.str_32/64np.unicodestrnp.str_

详细说明参考NumPy1.20.0ReleaseNotes。

下面详细说说事情的来龙去脉。

2.代码验证

下面我搭建Numpy1.20.0和1.24.0的环境进行简单测试,以及分析为什么会弃用这些类型。

首先是Numpy1.20.0环境搭建与简单测试:

python-mvenvnp1.20

sourcenp1.20/bin/activate

pipinstallnumpy==1.20

python-cimportnumpyasnp;a=np.array([1.0],dtype=np.float)

输出如下:

string:1:DeprecationWarning:`np.float`isadeprecatedaliasforthebuiltin`float`.Tosilencethiswarning,use`float`byitself.Doingthiswillnotmodifyanybehaviorandissafe.Ifyouspecificallywantedthenumpyscalartype,use`np.float64`here.

DeprecatedinNumPy1.20;formoredetailsandguidance:/devdocs/release/1.20.0-notes.html#deprecations

仔细看这段输出的话,可以发现从Numpy1.20版本开始,Numpy已经弃用np.float类型了,并且给出了替换建议,以及详细的说明文档地址。

而在Numpy1.24版本里面,正式删除了np.float,可以用下面的代码来测试。首先我们创建一个新的环境,安装Numpy1.24版本,然后创建一个np.float类型的数组:

python-mvenvnp1.24

sourcenp1.24/bin/activate

pipinstallnumpy==1.24

python-cimportnumpyasnp;a=np.array([1.0],dtype=np.float)

输出如下:

Traceback(mostrecentcalllast):

Filestring,line1