将NumPy数组转储为YAML格式的常规列表

4
使用 PyYAML 将 NumPy 数组保存到 YAML 文件中时,默认会添加大量元数据,以便在加载文件时可以还原实际数组。例如:
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数组处理成标准列表,而不必手动转换每个数组?
1个回答

5

可以通过添加自定义的“表现者”将数组转换为列表来实现:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接