float32表示为float64 NumPy Python

时间:2015-11-19 22:08:14

标签: python numpy floating-point

场合

  • 我需要使用astropy.io中的fits来读取文件中的数据,numpy使用float32
  • 我在阅读时获得的一些值是非常小的负here数字,当数据上实际上不应存在负值时(因为数据特征)。

问题

  • 这些数字是否非常小float64,读取并投放到float32时会变为负数吗?如果是的话,他们有多小?
  • 有没有办法快退这个过程,即获得原始的非常小的float64值?

1 个答案:

答案 0 :(得分:1)

  
      
  • 这些数字是非常小的float64,当读取并转换为float32变为负数时?如果是的话,他们必须有多小?
  •   

否 - 如果原始的float64值小于最小的可表示的float32数,则在转换后它将简单地等于零:

tiny = np.finfo(np.float64).tiny    # smallest representable float64 value
print(tiny)
# 2.22507385851e-308
print(tiny == 0)
# False
print(np.float32(tiny))
# 0.0
print(np.float32(tiny) == 0)
# True

从一个签名的表示法转换为另一个表示法始终保留sign bit

  
      
  • 有没有办法倒回过程,即获得原始的非常小的float64值?
  •   

不 - 从64位转换为32位意味着您实际上丢弃了原始表示中的一半信息,一旦它消失,就没有神奇的方法来恢复它。

对负值的一个更合理的解释是,它们是在数据存储之前对数据进行计算的舍入误差造成的。