numpy.astype数据精度导致数据变化的问题「建议收藏」

numpy.astype数据精度导致数据变化的问题「建议收藏」在用numpy.astype强制转换数据类型的时候,由于numpy精度的问题将会对长度超过16位的数据发生不可预见的变化。见以下样例:a=np.random.randint(10000000000000000,100000000000000000,6,dtype=np.int64).reshape(3,-1)aOut[250]:array([[84627891441616237…

大家好,又见面了,我是你们的朋友全栈君。

在用numpy.astype强制转换数据类型的时候,由于numpy精度的问题将会对长度超过16位的数据发生不可预见的变化。

见以下样例:

a=np.random.randint(10000000000000000,100000000000000000,6,dtype=np.int64).reshape(3,-1)

a
Out[250]: 
array([[84627891441616237, 76092046570743607],
       [98092567621991294, 29336557186973849],
       [27275086880071664, 17713014931142607]], dtype=int64)

a==a.astype(np.float64).astype(np.int64)
Out[251]: 
array([[False, False],
       [False, False],
       [ True, False]])

仔细观察a 和转换一遍后的a

a
Out[252]: 
array([[84627891441616237, 76092046570743607],
       [98092567621991294, 29336557186973849],
       [27275086880071664, 17713014931142607]], dtype=int64)

a.astype(np.float64).astype(np.int64)
Out[253]: 
array([[84627891441616240, 76092046570743600],
       [98092567621991296, 29336557186973848],
       [27275086880071664, 17713014931142608]], dtype=int64)

可以发现,所有数据前16位都是相同的,16位以后就不可控了,导致错误发生的原因,就是numpy的32位精度问题导致的。

怎么解决呢?

我尝试了DataFrame的object类型可以解决,解决方式如下:

将numpy转换为DataFrame的时候,指定数据类型为object。

生成之后,在利用astype将其转换为int64即可。

具体应用可见以下样例:

rl
Out[255]: 
array([-8049777870090522920, -5440935078746751688, -3933548592432029974,
       -2462334750121545038, -1190291399416696655,   501852907112055918,
        1104104769051714879,  1318804999709453069,  1643349955204012180,
        1985695761539862128,  2177922432728714602,  2539438373990063976,
        2757041686965216513,  2930804226408986280,  4652176466101519414,
        5587216625180694234,  6110778615839656518,  8414204104888822915],
      dtype=int64)

V
Out[256]: 
array([[ 1.17613153e+222, -5.20143643e+220, -2.56059855e+218,
        -2.56059878e+218,  1.82560909e+211,  1.01358871e+211,
         1.82560909e+211, -1.05320730e+221,  8.07676648e+221,
         3.23330432e+194, -2.48561946e+218, -1.18058699e+219,
         2.65113824e+164,  9.86541855e+219, -3.21047863e+219,
         7.98645998e+193, -8.12021191e+210,  1.01358815e+211],
       [-8.92833386e+221, -1.00145726e+221,  2.14225335e+218,
         2.14225304e+218, -1.40702046e+211, -1.60296698e+211,
        -1.40702046e+211,  1.04484451e+221,  9.40007615e+221,
         2.73018012e+194, -3.14728928e+218, -1.05611169e+219,
         9.09859019e+163, -5.68088783e+219,  5.46366951e+219,
        -2.49687040e+194, -1.95946525e+210, -1.60296712e+211]])

rl=DataFrame([rl,V[0],V[1]],dtype=object).T
rl.columns=['SOURCEID','ax','ay']
rl.SOURCEID=rl.SOURCEID.astype('int64')

rl.SOURCEID.values
Out[258]: 
array([-8049777870090522920, -5440935078746751688, -3933548592432029974,
       -2462334750121545038, -1190291399416696655,   501852907112055918,
        1104104769051714879,  1318804999709453069,  1643349955204012180,
        1985695761539862128,  2177922432728714602,  2539438373990063976,
        2757041686965216513,  2930804226408986280,  4652176466101519414,
        5587216625180694234,  6110778615839656518,  8414204104888822915],
      dtype=int64)

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/134530.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • PHP个人博客系统开发历程

    PHP个人博客系统开发历程

    2021年11月14日
  • WAR包补丁工具_修改war包配置文件

    WAR包补丁工具_修改war包配置文件简要:因目前处于运维历史悠久的WEB项目中,每次需求开发完成需要更打补丁文件,因此编写打补丁工具,以解决手动查找补丁文件的繁琐且重复操作。纯Java代码编写,使用Swing作为界面UI,原有代码只针对特殊使用场景,可以适当加以修改。适用:编译工具:EclipseLunaRelease(4.4.0)运行环境:JDK1.7代码:界面GUI部分:使用JSplitPane…

  • Java吧百度贴吧,年薪60W必备

    Java吧百度贴吧,年薪60W必备思考前面提到Kafka帮我们实现了各个版本的生产者代码,其实他也可以完全不提供这份代码,因为核心的队列的功能已经实现了,这些客户端的代码也可以完全交由用户自己实现。那么假如没有官方代码,我们又该实现一些什么功能,有哪些接口,哪些方法,以及如何组织这些代码呢。带着这样的问题我们一起来思考一下!一般对于这种带有数据流转的设计,我会从由谁产生?什么数据?通往哪去?如何保证通路可靠?这几个方面来考虑。消息自然是通过应用程序构造出来并提供给生产者,生产者首先要知道需要将消息发送到哪个Bro

  • PAC模式和全局模式「建议收藏」

    PAC模式和全局模式「建议收藏」PAC模式和全局模式,两种模式优缺点如下:【PAC模式】也就是智能分流模式,根据规则去匹配你访问的网站,仅加速国外网站,国内网站不受影响,非常智能;优点:节省流量,国内网站依旧走本地网络,速度快,绝大部分国外网站都走代理,速度也快。缺点:少部分国外网站不走代理,无法起到加速效果,甚至无法访问(解决方案:自己编辑PAC规则列表,将不走代理的国外网址加入进去,或者直接选择全局模式)。【全局模式】国内、国外所有网站都走代理。优点:可访问全球所有网站。缺点:所有网站都走代理,访问国内网站速度

    2022年10月19日
  • 别再浪费顶头上司的时间了::哈佛商业评论::每日管理小贴士

    别再浪费顶头上司的时间了::哈佛商业评论::每日管理小贴士

  • java uninstall tool_java卸载工具|java卸载工具(JavaUninstallTool)下载v1.1.0.0 – 欧普软件下载…「建议收藏」

    java uninstall tool_java卸载工具|java卸载工具(JavaUninstallTool)下载v1.1.0.0 – 欧普软件下载…「建议收藏」java卸载工具(JavaUninstallTool)是甲骨文官方发布的一款专门用于卸载JAVA软件的工具,能够非常方便快捷以及彻底的卸载掉JAVA,使用很简单,只需要解压缩即可使用,赶快下载使用吧!软件功能1、检测到的Java版本将向用户显示以供删除2、用户可以选择删除全部版本,也可以选择删除特定的Java版本3、适用于Windows操作系统4、检测并允许删除Java版本1.4…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号