人工智能之Numpy与Pandas培训文档
创建时间:2018-09-09  访问量:3231  4  0

人工智能之Numpy与Pandas培训文档

数组以二进制的形式读写文件

1、使用np.save()函数以二进制形式写入数组数据

>>> import numpy as np
>>> arr = np.random.random((2,3,4))
>>> arr
array([[[0.65712601, 0.54760056, 0.72445342, 0.81939765],
        [0.43808339, 0.06316008, 0.78894646, 0.2486632 ],
        [0.94545595, 0.89728879, 0.23388203, 0.52778294]],

       [[0.22730344, 0.99890456, 0.18585903, 0.92275627],
        [0.61146009, 0.23223669, 0.66239117, 0.80013561],
        [0.51184934, 0.29470505, 0.23772627, 0.38468268]]])
>>> np.save('data',arr) # 将arr数组保存到文件data.npy中

我们在上面先生成了一个随机数组arr,然后将arr保存到data.npy中,np.save()方法会自动在文件名后加上扩展名.npy。这个文件是二进制文件,不能通过文本来读取出来,就算用文本文件打也也是一堆乱码。save函数有4个参数,第1个参数就是指定文件名称,第3参数是数组,第3个参数是Bool值allow_pickle,如果为True,表示使用pickle格式存储数据,第4个参数也是Bool值,用来兼容Python3的,黙认就好。

2、使用np.load()函数以二进制开式读取数据

>>> arr2 = np.load('data.npy') # 读取时需要指定文件扩展名
>>> arr2
array([[[0.65712601, 0.54760056, 0.72445342, 0.81939765],
        [0.43808339, 0.06316008, 0.78894646, 0.2486632 ],
        [0.94545595, 0.89728879, 0.23388203, 0.52778294]],

       [[0.22730344, 0.99890456, 0.18585903, 0.92275627],
        [0.61146009, 0.23223669, 0.66239117, 0.80013561],
        [0.51184934, 0.29470505, 0.23772627, 0.38468268]]])

注意:这里的文件都是保存在当前目录下,如果不在,需要指定相对或绝对文件路径。

 

数组以文本的形式读写文件

1、np.loadtxt()函数读取文本文件

loadtxt(fname, dtype=<type 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding='bytes')

fname: 文件名称

dtype: 数据类型

comments:注释符号

delimiter:数据元素分隔符

converters:转换函数,一般用不到

skiprows:跳过的行数

usecols:使用的列

unpack:是否解包

ndmin: 维度

encoding:文件编码

举例:

先创建一个文本文件example.csv,输入如下内容

用loadtxt读一下看看:

>>> arr4 = np.loadtxt('example.csv',dtype=float,comments='#',delimiter=',') 
>>> arr4
array([[ 1.,  2.,  3.,  4.],
       [ 5.,  6.,  7.,  8.],
       [ 9., 10., 11., 12.]])

分隔符一定要指定。delimiter黙认是空格分隔的,如果你的文件中的数据不是以空格分隔的,就必须指定这个delimiter参数,否则报错。注释符黙认是'#",我们在文件中也是使用了#注释的,如果要使用其它符号作为注释符一定要指定。一般使用这几个参数就可以满足要求了。

我们再来看看另一个函数np.genfromtxt读取文件

>>> arr5 = np.genfromtxt('example.csv',delimiter=',')
>>> arr5
array([[ 1.,  2.,  3.,  4.],
       [ 5.,  6.,  7.,  8.],
       [ 9., 10., 11., 12.]])

 2、通过np.savetxt()函数写入文本文件

savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n', header='', footer='', comments='# ', encoding=None)

我们来看看示例:

>>> arr
array([[0.65712601, 0.54760056, 0.72445342, 0.81939765],
       [0.43808339, 0.06316008, 0.78894646, 0.2486632 ],
       [0.94545595, 0.89728879, 0.23388203, 0.52778294],
       [0.22730344, 0.99890456, 0.18585903, 0.92275627],
       [0.61146009, 0.23223669, 0.66239117, 0.80013561],
       [0.51184934, 0.29470505, 0.23772627, 0.38468268]])
>>> np.savetxt('arr.out',arr,delimiter=';',fmt='%.2f')

我们看看文本文件是什么样子的。

是以';'分隔的保留两位小数的数据文本。

注意:以文本方式保存到文件中时,数组的维度必需是1或2维数组,如果是2维以上的数组则无法保存至文本文件中。如果需要保存,可以先将高维数组reshape成2维再保存,读取时再使用reshape进行还原。