5

次のような YAML を読み込もうとしています。

dist: !!opencv-matrix
   rows: 380
   cols: 380
   dt: f
   data: [ 0., 0., -1.88644529e+18, 2.45423365e+00, 11698176.,
       2.03862047e+00, -8.85501460e+10, 2.54738545e+00, 1.71208843e+20,
       ...
       2.44447327e+00 ]

読み込みコードは次のとおりです。

import yaml
y = yaml.load(s)

ここで、s は文字列に読み込まれた YAML です。

次のエラーが表示されます。

yaml.constructor.ConstructorError: could not determine a constructor for the tag 'tag:yaml.org,2002:opencv-matrix'
  in "<string>", line 382, column 7:
    dist: !!opencv-matrix

これで十分なので、そのタグのコンストラクターを追加します。

def opencv_matrix(loader, node):
    mapping = loader.construct_mapping(node)
    mat = np.array(mapping["data"])
    mat.resize(mapping["rows"], mapping["cols"])
    return mat

yaml.add_constructor(u"!!opencv-matrix", opencv_matrix)
y = yaml.load(s)

それでもエラーが発生します。ただし、!!opencv_matrix を !opencv_matrix に置き換えると、すべてが機能します。

何が起きてる?

4

1 に答える 1