一. npy
1.1 np.save
save(file, arr, allow_pickle=True, fix_imports=True)
保存数组arr
刀文件file
,并允许序列化pickle
.其中的fix_imports
可以允许python2和python3之间的兼容。
- 注意:np.save默认的文件格式为
.npy
,如果不是以其结尾,则自动添加。
1.2 np.load
load(file, mmap_mode=None, allow_pickle=False, fix_imports=True, encoding='ASCII')
- mmap_mode : {None, ‘r+’, ‘r’, ‘w+’, ‘c’}, optional
- allow_pickle : bool, optional.If true,允许加载存储在npy文件中的pickle对象数组。
1.3 保存与读取
1.3.1 保存一个numpy数组并读取
a = np.random.randint(10,size=(5,))
np.save("a",a) # 保存数据,末尾可自动添加.npy
a1=np.load("a.npy")# 读取数据
a1 # 查看数据
out:array([4, 1, 8, 7, 6])
1.3.2 保存一个整齐的list并读取
注释:
-
dtype='<U1'
:第一个字符是字节序,< 表示小端,> 表示大端,| 表示平台的字节序;U是上表中的最后一行Unicode的意思;1代表长度字符串的长度
1.3.3 保存一个参差不齐的嵌套序列
参差不齐的嵌套序列的举例如下:
1. ['a','b',[1,2]] ##含嵌套序列
2. [np.array([1,4]),np.array([2,3,5])] ##长度参差不齐
当遇到以上类似的情况的时候,np.save()会弹出worning,在np.load(file)会报错,提示使用np.load(file,allow_pickle=True)
二、npz
2.1 np.savez和np.loads
savez(file, *args, **kwds)
和loads(*args, **kwargs)
举例的数据
from scipy.sparse import coo_matrix
# 建立稀疏矩阵
data = [1,2,3,4]
row = [3,6,8,2]
col = [0,7,4,9]
c = coo_matrix((data,(row,col)),shape=(10,10)) #构建10*10的稀疏矩阵,其中不为0的值和位置在第一个参数
print(c)
2.2 单个数组的np.savez保存和读取np.load
2.3 多个数组的保存np.savez和读取np.load
2.4 np.load加载压缩后的npz
保存为稀疏矩阵
sparse.save_npz("cc.npz",c)
读取稀疏矩阵
值得注意的是:使用np.loadz读取后的数据虽然类似dict,但不是真的dict无法使用c2.keys()
的方式获取数据的key.如果想知道具体包含那些数据:
- 采用上面的方法
c2.__dict__
- 调用属性
c2.files
- 采用循环的方法:
for k in c2.keys() :print k
2.4 scipy.sparse中的save_npz和load_npz
- 栗子:
from scipy.sparse import coo_matrix
# 建立稀疏矩阵
data = [1,2,3,4]
row = [3,6,8,2]
col = [0,7,4,9]
c = coo_matrix((data,(row,col)),shape=(10,10))
- 保存文件
save_npz(file, matrix, compressed=True) 保存一个使用'.npz'格式的稀疏矩阵为一个文件
- 读取文件
load_npz(file) 从一个使用'.npz'格式的文件中加载一个稀疏矩阵
- 根据稀疏矩阵的类型
coo_matrix
可以得到数据的读取形式 - 文件加载后的对象的属性
三、csv
pd.read_csv(file)
四、txt
4.1 np.savetext和np.loadtxt
savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n', header='', footer='', comments='# ', encoding=None)
- X:1D or 2D array_like
loadtxt(fname, dtype=<class 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding='bytes', max_rows=None)
- dtype: 生成array数组的元素的类型,默认float
4.2 数组的txt保存和读取
ar = np.array([[1,2,3],
[11,22,33],
[2,3,4,],
[22,33,44],
[5,6,7]]) ##生成数组
- 提醒: 如果txt中存在非数字的字符,则np.loadtxt(file)会报错。报错原因类似:ValueError: could not convert string to float: ‘row’
- 由于是首行含有非数字字符,所以读取失败
4.3 循环读写txt,最后读取记录
背景描述:在做一个模型训练或着测试的时候,我们希望将一些标量数据,每次保存下来。在读取的该数据的时候可以生成数组,从而方便作图。
循环写入数据
# 1. 创建循环的数据
a = np.random.uniform(size=(20,3))#20行3列的数据
# 2. 循环写入txt
for i in range(20):
f = open("loss2.txt","a+")#a+表示每次打开txt,不清空,续写
f.write(str(a[i][0])+" ")#每次写入一个字符串,不可是float
f.write(str(a[i][1])+" ")
f.write(str(a[i][2])+"\n")
f.close()
查看txt数据
读取数据
b=np.loadtxt("loss2.txt")
验证
np.sum(b==a) #20*3=60,每次位置都是True
五、pkl