使用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中检查代码