使用 Python 将浮点数转储到 YAML 文件中的特定精度

Dump float to specific precision in YAML file with Python

如何使用 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 保留了每个标量浮点数的各自长度。

然后你可以使用print(type(data[0][0]))检查data,它会告诉你 这些序列元素被加载到 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