ERNIE:BERT,你看到我的npy了吗,我记得我放在这个文件夹里的呀(」><)」
BERT:就你还有npy?我还单着呢 ̄へ ̄
ERNIE:你想什么呢?我指的是numpy储存数据的文件的后缀名.npy......(oT-T)尸
BERT:emm......
文件的存取
读取CSV文件
将数组中的数据写入CSV文件中
- 函数:
np.savetxt(frame,array,fmt='%.18e',delimiter=None)
frame
:文件、字符串或产生器,可以是.gz或.bz2的压缩文件。array
:存入文件的数组。fmt
:写入文件的格式,例如:%d %.2f %.18e
。delimiter
:分割字符串,默认是任何空格。
打开编程环境:
import numpy as np
a = np.arange(20).reshape(4,5)
np.savetxt('a.csv',a,fmt='%.1f',delimiter=',')
运行后打开记事本:
0.0,1.0,2.0,3.0,4.0
5.0,6.0,7.0,8.0,9.0
10.0,11.0,12.0,13.0,14.0
15.0,16.0,17.0,18.0,19.0
读取CSV文件到数组中
- 函数
np.loadtxt(frame,dtype=np.float,delimiter=None,unpack=False)
frame
:文件、字符串或产生器,可以是.gz或.bz2的压缩文件。dtype
:数据类型,可选。delimiter
:分割字符串,默认是任何空格。unpack
:如果True
,读入属性将分别写入不同变量。
打开编程环境,我们读入刚才的a.csv
:
import numpy as np
a = np.loadtxt('a.csv',dtype=np.int,delimiter=",")
print(a)
运行结果:
[[ 0 1 2 3 4][ 5 6 7 8 9][10 11 12 13 14][15 16 17 18 19]]
总结
- 存入CSV文件:
np.savetxt()
,无返回值。 - 取CSV文件:
np.loadtxt()
,有返回值。 - 局限性:只能有效存取一维和二维数据。
存取多维数组的方法
将多维数据存入文件
- 函数:
a.tofile(frame,sep='',format='%s')
frame
:文件、字符串。sep
:数据分割字符串,如果是空串,写入文件为二进制。format
:写入数据的格式。
再次打开编程环境(安利一波slight亮主题的pycharm):
import numpy as np
a = np.arange(20).reshape(4,5)
a.tofile("a.bat",sep=",",format='%d')
我们得到了一个二进制文件打开后:
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19
可以看到,与savetxt函数不同,tofile输出的文件并没有体现数据的维度,而是将数组中的所有数据压缩成一维再逐个输出到文件中。
读入二进制文件
- 函数:
np.fromfile(frame,dtype=float,count=-1,sep='')
frame
:文件、字符串。dtype
:读取的数据类型。count
:读入元素个数,-1表示读入整个文件。sep
:数据分割字符串,如果是空串,写入文件为二进制。
再试试:
import numpy as np
a = np.fromfile("a.bat",dtype=np.int,sep=',').reshape(4,5)
print(a)
运行结果:
[[ 0 1 2 3 4][ 5 6 7 8 9][10 11 12 13 14][15 16 17 18 19]]
np专用文件存取方式
np针对自身有一个非常简便的文件存取方式(其实笔者认为上面两种挺简单的了......),这个方法需要使用numpy特定的文件格式(.npy)
存入
- 存函数:
np.save(fname,array)
或np.savez(fname,array)
frame
:文件名,以.npy
为扩展名,压缩名为.npz
。array
:数组变量。
读取
- 函数:
np.load(fname)
frame
:文件名,以.npy
为扩展名,压缩名为.npz
。
来试试这种(最简便的文件读取方式):
import numpy as np
a = np.arange(100).reshape(5,10,2)
np.save("a.npy",a)
b = np.load("a.npy")
print(b)
运行结果:
[[[ 0 1][ 2 3][ 4 5]...[94 95][96 97][98 99]]]
为什么这种用.npy
文件存取的方式使用起来更简单呢?我们打开“a.npy”文件,会在看不懂的文件的第一行看到一些我们看得懂的:
揘UMPY• v {'descr': '<i4', 'fortran_order': False, 'shape': (5, 10, 2), }
事实上np.save将np数组以二进制形式存入.npy文件,并将np数组的原信息以键值对的形式(字典)存入.npy
文件的第一行。这是为np量身打造的文件格式,所以我们在读取时就不需要指定一些其他的参数了,原本的np数组信息早就存进去了。