【问题标题】:recover dict from 0-d numpy array从 0-d numpy 数组中恢复字典
【发布时间】:2012-01-11 18:59:29
【问题描述】:

发生的事情是我(错误地)使用命令numpy.save() 保存了一个字典(没有显示错误消息),现在我需要恢复字典中的数据。当我使用numpy.load() 加载它时,它的类型为 (numpy.ndarray) 并且为 0-d,因此它不再是字典,我无法访问其中的数据,0-d 数组不可索引所以做类似的事情

mydict = numpy.load('mydict')
mydict[0]['some_key'] 

不起作用。我也试过了

recdict = dict(mydict)

但这也没有用。

为什么当我用numpy.save()保存字典时numpy没有警告我?

有没有办法恢复数据?

提前致谢!

【问题讨论】:

  • 这是 numpy 的可疑设计。只要给我我的听写!

标签: python dictionary load numpy save


【解决方案1】:

使用mydict.item() 将数组元素作为 Python 标量获取。

>>> import numpy as np
>>> np.save('/tmp/data.npy',{'a':'Hi Mom!'})
>>> x=np.load('/tmp/data.npy')
>>> x.item()
{'a': 'Hi Mom!'}

【讨论】:

    【解决方案2】:

    0-d 数组可以使用空元组进行索引:

    >>> import numpy as np
    >>> x = np.array({'x': 1})
    >>> x
    array({'x': 1}, dtype=object)
    >>> x[()]
    {'x': 1}
    >>> type(x[()])
    <type 'dict'>
    

    【讨论】:

    • [()] mate 到底是怎么回事?
    • @RishabhAgrahari x[a, b, c]x[(a, b, c)] 的语法糖,所以x[1,2] 意味着获取二维数组x 的索引(1,2) 处的元素。因为 x 是一个 0d 数组,所以 x[()] 是获取 0-d 数组 x 的项。
    • 真的很有帮助...从来没想过()可以用于索引零长度数组
    【解决方案3】:

    这是一种使用'allow_pickle=True''.tolist()' 恢复dict type 数据的方法。
    希望对你有所帮助。

    numpy.save('mydict.npy', org_dict)
    
    # load & convert type to dict
    mydict = numpy.load('mydict.npy', allow_pickle=True)
    re_dict = mydict.tolist()
    
    print('re_dict :', type(re_dict), re_dict)   # 're_dict' is '<type dict>' 
    

    【讨论】:

      猜你喜欢
      • 2014-02-07
      • 2013-11-28
      • 2012-06-06
      • 1970-01-01
      • 2016-10-23
      • 2014-10-16
      • 2019-03-29
      • 1970-01-01
      • 2014-05-18
      相关资源
      最近更新 更多