【问题标题】:Dump float to specific precision in YAML file with Python使用 Python 将浮点数转储到 YAML 文件中的特定精度
【发布时间】:2021-04-19 13:43:49
【问题描述】:

如何使用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 输出中包含多少小数位?

【问题讨论】:

    标签: python ruamel.yaml


    【解决方案1】:

    如果你想要一个带有 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
    

    【讨论】:

    • 如有必要,您还可以获得科学记数法 (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)请注意,除了第一个之外,所有的都是关键字参数。
    • 谢谢,但负数似乎变成了正数。例如。 import sys, ruamel.yaml; data = [ruamel.yaml.scalarfloat.ScalarFloat(-0.18472, width=10, prec=1)]; ruamel.yaml.YAML().dump(data, sys.stdout) 的输出似乎与数字为正数相同。我究竟做错了什么?我使用的是 17.4 版。
    • AFAICT Numpy 的 random.random 无法生成负数。如果您有任何来自其他地方的信息,则必须提供 m_sign(尾数符号)参数,可以是 False(即 N/A)、"+""-"),请确保如果您有无穷大或 NaN 值,请检查 constructor.py 中的代码
    猜你喜欢
    • 2014-04-11
    • 2020-02-03
    • 2016-01-03
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多