当使用 PyYAML 在 YAML 文件中保护 NumPy 数组时,它默认添加大量元数据,以便在加载文件时可以恢复实际数组。例子:
import numpy as np
import yaml
a = np.array([1, 2, 3])
print(yaml.dump(a))
结果是
!!python/object/apply:numpy.core.multiarray._reconstruct
args:
- !!python/name:numpy.ndarray ''
- !!python/tuple
- 0
- !!binary |
Yg==
state: !!python/tuple
- 1
- !!python/tuple
- 3
- !!python/object/apply:numpy.dtype
args:
- i8
- false
- true
state: !!python/tuple
- 3
- <
- null
- null
- null
- -1
- -1
- 0
- false
- !!binary |
AQAAAAAAAAACAAAAAAAAAAMAAAAAAAAA
但是,我不关心恢复确切的 NumPy 数组,而是需要生成的 YAML 与其他应用程序兼容。因此,我希望将数组作为正常序列转储,即像这样:
- 1
- 2
- 3
有没有办法告诉 PyYAML 像标准列表一样处理 NumPy 数组,而不必手动转换每个数组?
可以通过添加将数组转换为列表的自定义“代表者”来完成:
import numpy as np
import yaml
def ndarray_representer(dumper: yaml.Dumper, array: np.ndarray) -> yaml.Node:
return dumper.represent_list(array.tolist())
yaml.add_representer(np.ndarray, ndarray_representer)
a = np.array([1, 2, 3])
print(yaml.dump(a))
结果输出:
- 1
- 2
- 3
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)