python怎么保存_python如何保存矩阵,保存matrix,保存numpy.ndarray

问题:如何将array保存到txt文件中?如何将存到txt文件中的数据读出为ndarray类型?python如何保存矩阵,保存matrix,保存numpy.ndarray

python中list、array、matrix之间的基本区别:直通车

分析

a=np.arange(0,12,0.5).reshape(4,-1) np.savetxt("a.txt",a)#缺省按照'%.18e'格式保存数据,以空格分隔 np.loadtxt("a.txt") array([[0.,0.5,1.,1.5,2.,2.5], [3.,3.5,4.,4.5,5.,5.5], [6.,6.5,7.,7.5,8.,8.5], [9.,9.5,10.,10.5,11.,11.5]])

有些时候会报错:TypeError: Mismatch between array dtype (‘object’) and format specifier (‘%.18e’) 其中format specifier (‘%.18e’)表示传入的格式,

常用的有%d,%s

fmt:strorsequenceofstrs,optional Asingleformat(%10.5f),asequenceofformats,ora multi-formatstring,e.g.'Iteration%d--%10.5f',inwhichcase`delimiter`isignored.Forcomplex`X`,thelegaloptionsfor`fmt`are:a)asinglespecifier,`fmt='%.4e'`,resultinginnumbersformatted like`'(%s+%sj)'%(fmt,fmt)` b)afullstringspecifyingeveryrealandimaginarypart,e.g. `'%.4e%+.4ej%.4e%+.4ej%.4e%+.4ej'`for3columns c)alistofspecifiers,onepercolumn-inthiscase,therealandimaginarypartmusthaveseparatespecifiers, e.g.`['%.3e+%.3ej','(%.15e%+.15ej)']`for2columns

np.savetxt("a.txt",a,fmt="%d",delimiter=",")#改为保存为整数,以逗号分隔 np.loadtxt("a.txt",delimiter=",")#读入的时候也需要指定逗号分隔 array([[0.,0.,1.,1.,2.,2.], [3.,3.,4.,4.,5.,5.], [6.,6.,7.,7.,8.,8.], [9.,9.,10.,10.,11.,11.]])

案例:

trainMat=[[1,1,1],[1,0,2,0,1],[1,2,3,4]]numpy.savetxt("filename.txt",trainMat,fmt="%s",delimiter=",")

article-89531-1.html

但是在加载过程中会报错!

c=numpy.loadtxt("filename.txt",delimiter=",",skiprows=0,dtype=int)

article-89531-1.html

如果处理下:加个b

c=numpy.loadtxt(b"filename.txt",delimiter=",",skiprows=0,dtype=int)1

返回的结果反而变了,当成了一个数组,因此,在用loadtxt适用于1维

article-89531-1.html

结论:

Numpy能够读写磁盘上的文本数据或二进制数据。

存取文本文件

np.loadtxt和np.savetxt可以读写1维和2维的数组:

同时可以指定各种分隔符、针对特定列的转换器函数、需要跳过的行数等。

np.loadtxt(FILENAME, dtype=int, delimiter=’ ‘)

np.savetxt(“a.txt”, a, fmt=”%d”, delimiter=”,”)

例子:

a=np.arange(0,10).reshape(2,-1) array([[0,1,2,3,4], [5,6,7,8,9]]) np.savetxt("a.txt",a)#缺省按照'%.18e'格式保存数据,以空格分隔 np.loadtxt("a.txt") array([[0.,1.,2.,3.,4.], [5.,6.,7.,8.,9.]]) a=np.arange(0,10,0.5).reshape(4,-1) array([[0.,0.5,1.,1.5,2.], [2.5,3.,3.5,4.,4.5], [5.,5.5,6.,6.5,7.], [7.5,8.,8.5,9.,9.5]]) np.savetxt("a.txt",a,fmt="%d",delimiter=",")#改为保存为整数,以逗号分隔 np.loadtxt("a.txt",delimiter=",")#load时也要指定为逗号分隔 array([[0.,0.,1.,1.,2.], [2.,3.,3.,4.,4.], [5.,5.,6.,6.,7.], [7.,8.,8.,9.,9.]])

np.savez 多个数组保存

如果你想将多个数组保存到一个文件中的话,可以使用numpy.savez函数。savez函数的第一个参数是文件名,其后的参数都是需要保存的数组,也可以使用关键字参数为数组起一个名字,非关键字参数传递的数组会自动起名为arr_0, arr_1, …。savez函数输出的是一个压缩文件(扩展名为npz),其中每个文件都是一个save函数保存的npy文件,文件名对应于数组名。load函数自动识别npz文件,并且返回一个类似于字典的对象,可以通过数组名作为关键字获取数组的内容:

>>>C=np.array([1,0,1,0]) >>>np.savez("files.npz",A,B,C_array=C) >>>D=np.load("files.npz") >>>D['arr_0'] array([[0,1,2,3,4], [5,6,7,8,9], [10,11,12,13,14]]) >>>D['arr_1'] array([[0,1,2,3,4], [5,6,7,8,9], [10,11,12,13,14]]) >>>D['arr_2'] Traceback(mostrecentcalllast): File"",line1,inFile"D:\Python3\lib\site-packages\numpy\lib\npyio.py",line255,in__getitem__ raiseKeyError("%sisnotafileinthearchive"%key) KeyError:'arr_2isnotafileinthearchive'>>>D['C_array'] array([1,0,1,0])

如果你用解压软件打开files.npz文件的话,会发现其中有三个文件:arr_0.npy, arr_1.npy, C_array.npy,其中分别保存着数组A,B,C的内容

np.load和np.save将数组以二进制格式保存到磁盘

np.load和np.save是读写磁盘数组数据的两个主要函数,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中。

>>>importnumpyasnp A=np.arange(15).reshape(3,5) >>>A array([[0,1,2,3,4], [5,6,7,8,9], [10,11,12,13,14]]) >>>np.save("A.npy",A)#如果文件路径末尾没有扩展名.npy,该扩展名会被自动加上。 >>>B=np.load("A.npy") >>>B array([[0,1,2,3,4], [5,6,7,8,9], [10,11,12,13,14]])

注:保存为Numpy专用的二进制格式后,就不能用notepad++等打开看了(乱码)。因此这种方式建议在不需要看保存文件内容的情况下使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值