如何解决使用 Python 在 YAML 文件中将浮点数转储到特定精度
如何使用 ruamel.yaml
指定应在 YAML 文件中转储浮点数的精度?
例如:
import sys
import numpy as np
from ruamel.yaml import YAML
yaml = YAML()
my_arr = np.random.random((1,3))
yaml.dump(my_arr.tolist(),sys.stdout)
可能输出:
- - 0.16197964351016936
- 0.6259092493078636
- 0.4335685294945195
如何选择要在此类 YAML 输出中包含的小数位数?
解决方法
如果你想使用 ruamel.yaml 实现特定的浮点格式,但不知道如何实现,那么 首先检查它是否往返并且 ruamel.yaml 可以保留格式:
import sys
import ruamel.yaml
yaml_str = """\
- - 0.16197
- 0.6259
- 0.433
"""
yaml = ruamel.yaml.YAML()
data = yaml.load(yaml_str)
yaml.dump(data,sys.stdout)
给出:
- - 0.16197
- 0.6259
- 0.433
如您所见,ruamel.yaml 保留了每个标量浮点数的单独长度。
然后您可以使用 data
检查 print(type(data[0][0]))
,它会告诉您
将这些序列元素加载到 ScalarFloat
实例列表中。那些
实例可以用宽度和精度等来实例化
import sys
import random
import ruamel.yaml
data = [[]]
for x in range(3):
data[0].append(ruamel.yaml.scalarfloat.ScalarFloat(random.random(),width=7-x,prec=1))
yaml = ruamel.yaml.YAML()
yaml.dump(data,sys.stdout)
这就给出了:
- - 0.59012
- 0.7968
- 0.079
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。