在用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)

numpy.astype数据精度导致数据变化的问题相关推荐

  1. 浏览器及时感知服务端数据变化的方式

    需求 在公司,有一个需求,是浏览器实时获取服务端数据变化,然后根据变化做相应的动作.需求场景如下:手机端扫描二维码,然后获取待取件订单列表,点击取件,进行取件,同时远端打印机打印出取件小票. 技术难点 ...

  2. 长文 | 从发展轨迹、社会变迁和人口数据变化来看工具类产品的发展出路有哪些(1)

    7月25日,我看到"腾讯某GM|工具类产品,未来发展的出路有哪些?"这个问题觉得很有意思,下面是我对这个问题的回答,希望有更多道友能参与进来分享. 我对这个问题很感兴趣,最近花了不 ...

  3. vue数组变化视图_vue对象数组数据变化,页面不渲染

    data() { // data数据 return { arr: [1,2,3], obj:{ a: 1, b: 2 } }; }, // 数据更新 数组视图不更新 this.arr[0] = 'OB ...

  4. python Box-Cox数据变化与逆变化

    Box-Cox数据变化是一个基于参数λ的数据变化方法 接受任意分布的输入,但需要值>0 可以使变化后的数据减少变量之间的相关性 减少噪声 数据Box-Cox变化与逆变换 stats box-co ...

  5. python npv 计算公式_Python numpy 中常用的数据运算

    Numpy 精通面向数组编程和思维方式是成为Python科学计算大牛的一大关键步骤.--<利用Python进行数据分析> Numpy(Numerical Python)是Python科学计 ...

  6. 使用useState因异步导致数据不能及时更新的问题

    相信大家在使用hooks的时候都踩过这样的坑,useState因异步导致数据不能及时更新. const [kwd, setkwd] = useState("")const chan ...

  7. python flask+apscheduler定时任务导致数据重复和错误

    python flask+apscheduler 定时任务导致数据重复和错误的解决办法 我们先看一下未定时前的代码,每一次执行数据都是准确的,是我们想要的结果 import datetime clas ...

  8. numpy使用[]语法索引二维numpy数组中指定数据行的数值内容(accessing the specific row in numpy array)

    numpy使用[]语法索引二维numpy数组中指定数据行的数值内容(accessing the specific row in numpy array) 目录 numpy使用[]语法索引二维numpy ...

  9. numpy使用[]语法索引二维numpy数组中指定数据列的数值内容(accessing the specific column in numpy array)

    numpy使用[]语法索引二维numpy数组中指定数据列的数值内容(accessing the specific column in numpy array) 目录 numpy使用[]语

最新文章

  1. My excellent 2018
  2. 渔民之友:Google X 新项目,用计算机视觉养鱼
  3. Java assert
  4. DirectShow学习
  5. abb机器人指令手册_第1519课 ABB机器人初级教程
  6. Keywords Search HDU - 2222(AC自动机模板)
  7. LeetCode--49. 字母异位词分组(哈希表)
  8. gnome boxes_如何使用GNOME Boxes的快照功能
  9. SpringCloud工作笔记085---SpringBoot项目中防止跨站脚本攻击功能添加
  10. Arkeia Software宣布支持第100个Linux平台
  11. onlyoffice添加删除字体
  12. 恶意代码攻击实验(冰河木马和广外男孩的使用)
  13. Win10 输入法工具栏抽风,无法调整水平垂直。
  14. linux系统semba,examples.desktop
  15. Win10虚拟桌面使用技巧
  16. 支付宝没有优势了,五大银行宣布今起手机银行转账汇款免收手续费
  17. command命令大全(转自http://blog.dhedu.gov.cn/u/72/archives/2009/14290.html)
  18. inode 耗尽故障处理办法
  19. 【PdgCntEditor】解决PDF的目录页码和PDF实际页码不一致的问题,书签页码偏移页面偏移功能,PDF页面标签的添加
  20. 静态路由和动态路由详解

热门文章

  1. 2.宽带安装与故障修复-1-新装
  2. 软件危机的概念,原因及消除途径
  3. 双十一@你:CSDN会员底价警告,据说有点刺激
  4. 【软件架构设计原则】开闭原则和依赖倒置原则
  5. 【信管4.1】范围与需求
  6. shellcode事件
  7. Android 集成海康威视监控 SDK,实现监控录像的查看
  8. web之html学习笔记
  9. Redis(四) - Redis的Java客户端
  10. WackoPicko安装教程