加载存储为.npz的词典失败

时间:2018-10-25 19:06:27

标签: python-3.x numpy dictionary

当我使用 np.load 打开它时,使用 np.savez 作为一个对象同时拥有一个字典存储,如下所示:

l得到以下内容:

public function index(Request $request)
{
    $books = Book::indexBooks()->paginate(20);
    $value = ($request->input('page', 1) - 1) * 5; // this resolves the value to be retuned
    // so, if 'page' is defined in the request it will get the value.
    // if not, it will be '1', so doing the math: $value = 0.

    return view('bookCRUD.index', compact('books'))
        ->with('i', $value);
}

但是当我尝试时:

my_dic=np.load('/home/values.npz')
my_dic.files
['scores']

将所有键和值作为一个对象输出。

有什么方法可以访问值和键?

类似:

my_dic['scores'] # len(my_dic['scores'])=1 but contains 3000 keys and 3000 values

谢谢

2 个答案:

答案 0 :(得分:0)

听起来像你一样

In [80]: np.savez('test.npz', score={'a':1, 'b':2})

In [81]: d = np.load('test.npz')
In [83]: d.files
Out[83]: ['score']
In [84]: d['score']
Out[84]: array({'a': 1, 'b': 2}, dtype=object)

这是一个带有对象dtype的1项数组。用item()提取该项目:

In [85]: d['score'].item()
Out[85]: {'a': 1, 'b': 2}

如果相反,我使用kwargs语法保存字典:

In [86]: np.savez('test.npz', **{'a':1, 'b':2})
In [87]: d = np.load('test.npz')
In [88]: d.files
Out[88]: ['a', 'b']

现在每个字典键都是存档中的一个文件:

In [89]: d['a']
Out[89]: array(1)
In [90]: d['b']
Out[90]: array(2)

答案 1 :(得分:0)

按照@hpalj给出的指示, 我通过以下方法解决了该问题:

x=list(my_dic['scores'].item()) #allows me to get the keys 
keys=[]
values=[]
for i in np.arange(len(x))
  value=my_dic['scores'].item()[x[i]]
  values.append(value)
  keys.append(x[i])

final_dic=dict(zip(keys,values))