浮点数是32个二进制数字,双数字是64个二进制数字吗?文档太难理解了.
所有位都转换为有效数字?或者小数点的位置是否占用了一些位?
我有一个MEMS IMU,我一直在收集数据,我正在使用pandas从中获取一些统计数据.每个循环收集6个32位浮点数.对于给定的集合运行,数据速率是固定的.数据速率在100Hz和1000Hz之间变化,收集时间长达72小时.数据保存在平面二进制文件中.我这样读了数据:
import numpy as np
import pandas as pd
dataType=np.dtype([('a','<f4'),('b','<f4'),('c','<f4'),('d','<f4'),('e','<f4'),('e','<f4')])
df=pd.DataFrame(np.fromfile('FILENAME',dataType))
df['c'].mean()
-9.880581855773926
x=df['c'].values
x.mean()
-9.8332081
Run Code Online (Sandbox Code Playgroud)
-9.833是正确的结果.我可以创建一个类似的结果,有人应该能够这样重复:
import numpy as np
import pandas as pd
x=np.random.normal(-9.8,.05,size=900000)
df=pd.DataFrame(x,dtype='float32',columns=['x'])
df['x'].mean()
-9.859579086303711
x.mean()
-9.8000648778888628
Run Code Online (Sandbox Code Playgroud)
我在Linux和Windows上,在AMD和Intel处理器上,在Python 2.7和3.5中重复了这一点.我很难过.我究竟做错了什么?得到这个:
x=np.random.normal(-9.,.005,size=900000)
df=pd.DataFrame(x,dtype='float32',columns=['x'])
df['x'].mean()
-8.999998092651367
x.mean()
-9.0000075889406528
Run Code Online (Sandbox Code Playgroud)
我可以接受这种差异.它处于32位浮点数精度的极限.
没关系.我星期五写了这个,解决方案今天早上给了我.这是由大量数据加剧的浮点精度问题.我需要在创建数据帧时将数据转换为64位浮点数:
df=pd.DataFrame(np.fromfile('FILENAME',dataType),dtype='float64')
Run Code Online (Sandbox Code Playgroud)
如果其他人遇到类似问题,我会留下帖子.