使用Python将浮点值转储到YAML文件中的特定精度
如何使用使用Python将浮点值转储到YAML文件中的特定精度,python,ruamel.yaml,Python,Ruamel.yaml,如何使用ruamel.YAML,指定在YAML文件中转储浮点数的精度 例如,这: 导入系统 将numpy作为np导入 从ruamel.yaml导入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
,指定在YAML文件中转储浮点数的精度
例如,这:
导入系统
将numpy作为np导入
从ruamel.yaml导入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保留每个标量浮点的各个长度
然后,您可以使用打印(键入(数据[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
如有必要,您可以获取科学符号(
1.2e-9
)以及一些额外参数,并在值上设置锚定。更完整的调用是ScalarFloat(value,width=width,prec=prec,m_-sign=m_-sign,m_-lead0=lead0,exp=exp,e_-width=e_-width,e_-sign=e_-sign,anchor=node.anchor)(来自constructor.py
)请注意,除了第一个参数外,其余都是关键字参数。谢谢,但负数似乎变成了正数。例如,导入系统,ruamel.yaml;数据=[ruamel.yaml.scalarfloat.scalarfloat(-0.18472,宽度=10,prec=1)];ruamel.yaml.yaml().dump(data,sys.stdout)
的输出似乎与数字为正数时相同。我做错了什么?我使用的是17.4.AFAICT Numpy版本的random。random
无法生成负数。如果您从其他地方有任何代码,您必须提供m_符号
(尾数符号)参数,该参数可以是False
(即N/A),“+”
或“-”
),如果您有无穷或NaN值,请确保在构造函数.py中检查代码