numpy保存加载数据(字典数据)

在使用numpy保存和加载数据的时候分别遇到了allow_pickle=False报错和字典数据加载后如何使用的问题,总结梳理如下。

普通数据的保存

numpy的保存和加载分别是以下两个函数:

  • numpy.save
  • numpy.load

使用方法较为简单,save会将数据保存为.npy 的文件。具体可直接看下面字典数据的例子。
可以进一步参见这篇文章,里面讲了非结构化数据保存以及 numpy.savez 的使用方法。
其他保存数据函数可参见文章 numpy数据存储(save、savetxt、savez)的区别
这里需要说明的是有时候直接使用load会报错:ValueError: Object arrays cannot be loaded when allow_pickle=False
这是由于numpy版本造成的,如果卸载新版本,重装 pip install numpy==1.16.2 的话是可以解决问题的,但这样未免有些麻烦,而且之后可能会有其他冲突。正确的解决方式为直接在 load 的参数列表中加上 allow_pickle=True,见下面字典数据的例子。具体可参考

字典数据保存与加载

字典数据的保存没有特殊之处,主要在于加载与使用。
如果直接用 np.load 来加载的话得到的数据类型是 ndarray,但却是0维数组,而且用字典的索引方式是会直接报错。

import numpy as np
a = {'alpha':1,'beta':'b','gamma':[2,3]}
np.save('test',a)    #在当前目录生成test.npy文件

b = np.load('test.npy',allow_pickle=True)
print(type(b))      #<class 'numpy.ndarray'>
print(b.shape)      #()
print(b.ndim)       #0
print(b['alpha'])   #报错

正确的使用方法是在加载的数据后加上 item() 则得到当时保存的字典,接下来的操作就与普通字典无异。

c = b.item()
print(c)           #{'alpha': 1, 'beta': 'b', 'gamma': [2, 3]}
print(type(c))     #<class 'dict'>

print(c.items())   #dict_items([('alpha', 1), ('beta', 'b'), ('gamma', [2, 3])])
print(c.keys())    #dict_keys(['alpha', 'beta', 'gamma'])
print(c.values())  #dict_values([1, 'b', [2, 3]])

print(c.get('alpha'))  #1,使用索引与get函数效果相同
print(c['alpha'])      #1

字典的常用操作

字典的创建可以直接使用花括号,也可以使用 dict() 函数

dict1 = {'a':1,'2020':[1,2,3],100:('hello','world')}
dict1
dict1.items()   #获取字典中所有键/值对元素,并一一封装在元组中
dict1.keys()    #获取字典中所有键
dict1.values()  #获取字典中所有值
dict1[100]      #输出键为100的字典元素值

输出结果为

{'a': 1, '2020': [1, 2, 3], 100: ('hello', 'world')}
dict_items([('a', 1), ('2020', [1, 2, 3]), (100, ('hello', 'world'))])
dict_keys(['a', '2020', 100])
dict_values([1, [1, 2, 3], ('hello', 'world')])
('hello', 'world')
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值