gpt4 book ai didi

python - 使用 np.savez 存储字典会产生意想不到的结果?

转载 作者:太空狗 更新时间:2023-10-29 17:45:27 25 4
gpt4 key购买 nike

我可以使用 np.savez 存储字典吗?结果令人惊讶(至少对我而言),我无法找到一种方法来通过 key 取回我的数据。

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

In [3]: np.savez('model.npz', **a)
In [4]: a = np.load('model.npz')
In [5]: a
Out[5]: <numpy.lib.npyio.NpzFile at 0x7fc9f8acaad0>

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

In [7]: a['0']['B']
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-16-c916b98771c9> in <module>()
----> 1 a['0']['B']

ValueError: field named B not found

In [8]: dict(a['0'])
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-17-d06b11e8a048> in <module>()
----> 1 dict(a['0'])

TypeError: iteration over a 0-d array

我不明白到底发生了什么。似乎我的数据变成了一个 0 维数组中的字典,让我无法按键取回我的数据。还是我遗漏了什么?

所以我的问题是:

  1. 这里发生了什么?如果我仍然可以通过 key 访问我的数据,怎么做?
  2. 存储此类数据的最佳方式是什么? (以 str 为键,其他字典为值的字典)

谢谢!

最佳答案

可以恢复数据:

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'].size
Out[45]: 1

您可以使用 item() 方法检索值(注意:这不是items() 字典的方法,也不是 NpzFile 的任何固有内容类,而是numpy.ndarray.item() method将数组中的值复制到标准 Python scalars .在 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])

关于python - 使用 np.savez 存储字典会产生意想不到的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22661764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com