【Python学习笔记】22:numpy文件读写和一些常量

读写文件

>>> import numpy as np
>>> x=np.random.rand(4,10) #创建4行10列的数组
>>> np.save('data.npy',x) #保存到文件中去
>>> y=np.load('data.npy') #读出来
>>> y
array([[ 0.05172888,  0.78455176,  0.99746837,  0.98090592,  0.05521975,
         0.06737037,  0.63083544,  0.44254825,  0.93834621,  0.36318013],
       [ 0.29050345,  0.14517367,  0.61757958,  0.50665998,  0.55011553,
         0.13645424,  0.81366777,  0.33778508,  0.48264842,  0.97306076],
       [ 0.61854519,  0.15586311,  0.30774871,  0.64933693,  0.43323761,
         0.24155786,  0.85237898,  0.83246228,  0.03486411,  0.31674452],
       [ 0.87512563,  0.16648195,  0.05647408,  0.98138101,  0.97925956,
         0.90027845,  0.78026884,  0.71574533,  0.25185204,  0.21767181]])

默认情况下数组是以未压缩的原始二进制格式保存在了npy文件里,用numpy的save可以保存进去,用numpy的load可以读出并返回(用numpy的save写进去的数据)。

>>> a_mat=np.matrix([3,5,7]) #创建一个矩阵
>>> a_mat.tostring() #转换成字节串
b'\x03\x00\x00\x00\x05\x00\x00\x00\x07\x00\x00\x00'

使用numpy矩阵的成员函数tostring()可以把它转换成一个字节串,可以用write()将它写进二进制文件中去,然后用read可以将它还原(这是python自己读写的知识)。

>>> a_mat.dumps() #将矩阵的数据转存为字符串(序列化)
b'\x80\x02cnumpy.core.multiarray\n_reconstruct\nq\x00cnumpy.matrixlib.defmatrix\nmatrix\nq\x01K\x00\x85q\x02c_codecs\nencode\nq\x03X\x01\x00\x00\x00bq\x04X\x06\x00\x00\x00latin1q\x05\x86q\x06Rq\x07\x87q\x08Rq\t(K\x01K\x01K\x03\x86q\ncnumpy\ndtype\nq\x0bX\x02\x00\x00\x00i4q\x0cK\x00K\x01\x87q\rRq\x0e(K\x03X\x01\x00\x00\x00<q\x0fNNNJ\xff\xff\xff\xffJ\xff\xff\xff\xffK\x00tq\x10b\x89h\x03X\x0c\x00\x00\x00\x03\x00\x00\x00\x05\x00\x00\x00\x07\x00\x00\x00q\x11h\x05\x86q\x12Rq\x13tq\x14b.'
>>> np.loads(_)
matrix([[3, 5, 7]])

使用dumps()转换到的信息可以用numpy的loads()还原。注意和tostring()的区别。

>>> a_mat.dump('x.dat') #将矩阵存储为指定文件
>>> np.load('x.dat')
matrix([[3, 5, 7]])

另外矩阵的成员函数dump()也可以将矩阵存储到指定文件中去,可以用numpy的load()还原它。
注意,numpy的load传入的是文件名字符串,读取其中的信息并反序列化;numpy的loads传入的是序列化后的字符串,直接作反序列化。

numpy提供的一些常量

>>> np.Inf #无穷大
inf
>>> np.NAN #非数字
nan
>>> np.Infinity #无穷大
inf
>>> np.MAXDIMS #数组的最大维度
32
>>> np.NINF #负无穷大
-inf
>>> np.NaN #非数字
nan
>>> np.NZERO #负0
-0.0

这些常量在一些特殊的场合可能会使用到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值