numpy.astype数据精度导致数据变化的问题
在用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)
7月25日,我看到"腾讯某GM|工具类产品,未来发展的出路有哪些?"这个问题觉得很有意思,下面是我对这个问题的回答,希望有更多道友能参与进来分享. 我对这个问题很感兴趣,最近花了不 ...
- vue数组变化视图_vue对象数组数据变化,页面不渲染
data() { // data数据 return { arr: [1,2,3], obj:{ a: 1, b: 2 } }; }, // 数据更新 数组视图不更新 this.arr[0] = 'OB ...
- python Box-Cox数据变化与逆变化
Box-Cox数据变化是一个基于参数λ的数据变化方法 接受任意分布的输入,但需要值>0 可以使变化后的数据减少变量之间的相关性 减少噪声 数据Box-Cox变化与逆变换 stats box-co ...
- python npv 计算公式_Python numpy 中常用的数据运算
Numpy 精通面向数组编程和思维方式是成为Python科学计算大牛的一大关键步骤.--<利用Python进行数据分析> Numpy(Numerical Python)是Python科学计 ...
- 使用useState因异步导致数据不能及时更新的问题
相信大家在使用hooks的时候都踩过这样的坑,useState因异步导致数据不能及时更新. const [kwd, setkwd] = useState("")const chan ...
- python flask+apscheduler定时任务导致数据重复和错误
python flask+apscheduler 定时任务导致数据重复和错误的解决办法 我们先看一下未定时前的代码,每一次执行数据都是准确的,是我们想要的结果 import datetime clas ...
- numpy使用[]语法索引二维numpy数组中指定数据行的数值内容(accessing the specific row in numpy array)
numpy使用[]语法索引二维numpy数组中指定数据行的数值内容(accessing the specific row in numpy array) 目录 numpy使用[]语法索引二维numpy ...
- numpy使用[]语法索引二维numpy数组中指定数据列的数值内容(accessing the specific column in numpy array)
numpy使用[]语法索引二维numpy数组中指定数据列的数值内容(accessing the specific column in numpy array) 目录 numpy使用[]语
最新文章
- My excellent 2018
- 渔民之友:Google X 新项目,用计算机视觉养鱼
- Java assert
- DirectShow学习
- abb机器人指令手册_第1519课 ABB机器人初级教程
- Keywords Search HDU - 2222(AC自动机模板)
- LeetCode--49. 字母异位词分组(哈希表)
- gnome boxes_如何使用GNOME Boxes的快照功能
- SpringCloud工作笔记085---SpringBoot项目中防止跨站脚本攻击功能添加
- Arkeia Software宣布支持第100个Linux平台
- onlyoffice添加删除字体
- 恶意代码攻击实验(冰河木马和广外男孩的使用)
- Win10 输入法工具栏抽风,无法调整水平垂直。
- linux系统semba,examples.desktop
- Win10虚拟桌面使用技巧
- 支付宝没有优势了,五大银行宣布今起手机银行转账汇款免收手续费
- command命令大全(转自http://blog.dhedu.gov.cn/u/72/archives/2009/14290.html)
- inode 耗尽故障处理办法
- 【PdgCntEditor】解决PDF的目录页码和PDF实际页码不一致的问题,书签页码偏移页面偏移功能,PDF页面标签的添加
- 静态路由和动态路由详解