![]() |
鼻子大的书包 · 乌兹别克斯坦,出事了_澎湃号·湃客_澎湃新闻 ...· 4 月前 · |
![]() |
酒量小的充值卡 · 求助: voyage越狱后 ...· 10 月前 · |
![]() |
才高八斗的橙子 · 【纯爱推文】 | ...· 1 年前 · |
![]() |
谦虚好学的烤地瓜 · 美好的世界(日本2021年西川美和执导的电影 ...· 1 年前 · |
![]() |
爱热闹的松鼠 · 风骚榜(2019-09-11更新) - 简书· 1 年前 · |
在搜索之前的答案一个小时后,我陷入了这个小问题。我想将代码中的矩阵存储在.yaml文件中
我从代码中获得了什么
Matrix
[[ 1.00665266e+03 0.00000000e+00 5.08285432e+02]
[ 0.00000000e+00 1.01086937e+03 3.45995536e+02]
[ 0.00000000e+00 0.00000000e+00 1.00000000e+00]]
我如何尝试保存这个矩阵(在我的代码中
mtx
是较短的名称)
fname = "calibrationC300.yaml"
data = dict(
Matrix = mtx,
with open(fname, "w") as f:
yaml.dump(data, f, default_flow_style=False)
但是我在YAML文件中读取的是完全错误的(仅仅是错误的转换?)
Matrix: !!python/object/apply:numpy.core.multiarray._reconstruct
args:
- &id001 !!python/name:numpy.ndarray ''
- !!python/tuple [0]
state: !!python/tuple
- !!python/tuple [3, 3]
- !!python/object/apply:numpy.dtype
args: [f8, 0, 1]
state: !!python/tuple [3, <, null, null, null, -1, -1, 0]
- false
- !!binary |
cWM87e1YkEAAAAAAAAAAAIUEEyb5SH1AAAAAAAAAAACp/Z3yc2qQQFv0vPqb5nZAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAPA/
这是我第一次使用Yaml文件,我哪里做错了?有没有方法可以在yaml文件中获得简单形式的矩阵(就像我从代码中获得的那样)?提前谢谢你
发布于 2018-09-21 09:36:07
不同之处在于float和numpy.float64。Yaml使用更复杂的方式来表示numpy.float64。如果您喜欢可读性更好的yaml,您可以将其更改为float。请参见以下示例:
print(yaml.dump({'test': 1, 'data':float(0.2)}, default_flow_style=False))
print(yaml.dump({'test': 2, 'data':numpy.float64(0.2)}, default_flow_style=False))
输出为:
data: 0.2
test: 1
data: !!python/object/apply:numpy.core.multiarray.scalar
- !!python/object/apply:numpy.dtype
args:
state: !!python/tuple
- null
- null
- null
- !!binary |
mpmZmZmZyT8=
test: 2
发布于 2016-11-19 20:54:00
这里唯一的错误似乎是您对
numpy
内部如何以及应该如何转储到YAML的期望。
一个简单的方法是检查你得到的YAML是不是正确的,就是
load
what you
dump
-ed:
import ruamel.yaml
import numpy
import pprint
mtx = [[1.00665266e+03, 0.00000000e+00, 5.08285432e+02],
[0.00000000e+00, 1.01086937e+03, 3.45995536e+02],
[0.00000000e+00, 0.00000000e+00, 1.00000000e+00],]
data = dict(Matrix=mtx)
yaml_str = ruamel.yaml.dump(data, default_flow_style=False)
data = ruamel.yaml.load(yaml_str)
print(data)
这就给出了:
{'Matrix': [[1006.65266, 0.0, 508.285432], [0.0, 1010.86937, 345.995536], [0.0, 0.0, 1.0]]}
numpy
使用的特殊类型是
,而不是
转储为简单的(和可读的) YAML,不能保证可以重新加载。对于一些构造来说,这可能是可能的,尽管它很容易导致歧义,而AFAIK简化对于任何
numpy
类型都是不可能的。
当然,您可以在不让
numpy
提供其恢复信息的情况下转储该YAML,方法是:
ruamel.yaml.round_trip_dump(data, sys.stdout)
这就给出了:
Matrix:
- - 1006.65266
- 0.0
- 508.285432
![]() |
爱热闹的松鼠 · 风骚榜(2019-09-11更新) - 简书 1 年前 |