使用np.savez存储字典会产生意外结果吗?

使用np.savez存储字典会产生意外结果吗?,第1张

使用np.savez存储字典会产生意外结果吗?

可以恢复数据:

In [41]: a = {'0': {'A': array([1,2,3]), 'B': array([4,5,6])}}In [42]: np.savez('/tmp/model.npz', **a)In [43]: a = np.load('/tmp/model.npz')

注意,dtype是’object’。

In [44]: a['0']Out[44]: array({'A': array([1, 2, 3]), 'B': array([4, 5, 6])}, dtype=object)

而且数组中只有一项。该项目是Python字典!

In [45]: a['0'].sizeOut[45]: 1

您可以使用

item()
方法来检索值(注意:这 不是
items()
字典的 方法,也不是
NpzFile

类固有的任何
numpy.ndarray.item()
方法,而是
将数组中的值复制到标准Python标量的方法。在
object
dtype数组中,任何值Python标量保存在数组(甚至是字典)的单元格中:

In [46]: a['0'].item()Out[46]: {'A': array([1, 2, 3]), 'B': array([4, 5, 6])}In [47]: a['0'].item()['A']Out[47]: array([1, 2, 3])In [48]: a['0'].item()['B']Out[48]: array([4, 5, 6])

还原

a
为辞令:

In [84]: a = np.load('/tmp/model.npz')In [85]: a = {key:a[key].item() for key in a}In [86]: a['0']['A']Out[86]: array([1, 2, 3])


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5617724.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存