关于np.savetxt保存的数据的小数点问题

    for object in root.findall('object'):
        for part in object.findall('part'):
            if part.find('name').text == 'hand':
                bndbox = part.find('bndbox')
                xmin = int(bndbox.find('xmin').text)
                ymin = int(bndbox.find('ymin').text)
                xmax = int(bndbox.find('xmax').text)
                ymax = int(bndbox.find('ymax').text)
                x = round(((xmax - xmin) / 2 + xmin) / width, 6)
                y = round(((ymax - ymin) / 2 + ymin) / height, 6)
                w = round((xmax - xmin) / width, 6)
                h = round((ymax - ymin) / height, 6)
                c = 0

                np.savetxt('1.txt', np.array([c, x, y, w, h]).reshape(1,5))

虽然对x,y,w,h限定了保留小数点后六位,但np.savetxt保存下来的1.txt文件仍然是%18e的

 这是因为np.savetxt()函数在保存浮点数到文本文件时,默认并不会限定浮点数的小数位数。它会以“%.18e”的格式保存浮点数,也就是科学计数法形式保存,小数位数不定。所以在这个代码中,x、y、w、h虽然计算结果是限定到小数点后6位的,但调用np.savetxt()保存到文件时,小数位数就不定了。要解决这个问题,你可以向np.savetxt()指定float_format参数,限定浮点数的保存格式。例如:

np.savetxt('1.txt', np.array([c, x, y, w, h]).reshape(1,5), fmt='%.6f')

np.savetxt('1.txt', np.array([c, x, y, w, h]).reshape(1,5), fmt='%.6e')

这将浮点数格式保存为‘%.6f’形式或‘%.6e’科学计数法形式,都可以限定小数位数到6位

并且在np.savetxt()中,你可以同时指定多个float_format参数,分别对不同的列应用不同的格式

np.savetxt('1.txt', np.array([1, 0.123456, 0.234567, 0.345678]).reshape(1,4), 
           fmt=['%d', '%.6f', '%.6f', '%.6f'])

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值