python 科学计算学习一:numpy文件存取,内存映射

1,文件的存取可以是二进制类型,也可以是文本文件。numpy的二进制文件又可以是有格式的和没有格式的类型。tofile()可以很简单的将数组以二进制的形式写进到文件里面,同时fromfile()也可以方便的读回数据。

>>> a
array([[1, 6, 6, 7],
       [0, 1, 2, 3],
       [1, 2, 7, 8]])
>>> a.tofile(‘a.bin‘)
>>> b=np.fromfile(‘a.bin‘,dtype=np.int32)
>>> b
array([1, 6, 6, 7, 0, 1, 2, 3, 1, 2, 7, 8])
>>> b.shape=3,4
>>> b
array([[1, 6, 6, 7],
       [0, 1, 2, 3],
       [1, 2, 7, 8]])

    发现要保持原来的形式还是比较麻烦的。其实还有更加简单的命令:save(),load()简单直观。(注意扩展名

>>> np.save(‘a.npy‘,a)
>>> c=np.load(‘a.npy‘)
>>> c
array([[1, 6, 6, 7],
       [0, 1, 2, 3],
       [1, 2, 7, 8]])

也可以使用savez()命令同时存储多个数组。

>>> np.savez(‘a.npz‘,a,b)

>>> d=np.load(‘a.npz‘)

>>> d[‘arr_0‘]
array([[1, 6, 6, 7],
       [0, 1, 2, 3],
       [1, 2, 7, 8]])
>>> d[‘arr_1‘]
array([[1, 6, 6, 7],
       [0, 1, 2, 3],
       [1, 2, 7, 8]])


若是存储为文本文件,使用:savextxt(),loadtxt(),可以处理一维,二维数组文件。也可以用这两个命令读写CSV格式的文本文件。

>>> a
array([[1, 6, 6, 7],
       [0, 1, 2, 3],
       [1, 2, 7, 8]])
>>> np.savetxt(‘a.txt‘,a)
>>> np.loadtxt(‘a.txt‘)
array([[ 1.,  6.,  6.,  7.],
       [ 0.,  1.,  2.,  3.],
       [ 1.,  2.,  7.,  8.]])

其实在python中可以open()命令来读出txt文件,然后使用readlines()命令读取整个文件。


2,内存映射,当需要存取一个很大的文件里面的小部分的数据的时候,读入整个文件显然是非常的浪费资源的。于是要使用到内存映射的方法。

memmap(filename,dtype=uint8,mode=“r+”,offset=0,shape,order=‘C’)其中,offset是文件中存储数据的起始位置;mode可以是c(不写入的修改)r+(可读写)w+(创建或是覆盖已有文件)。

>>> a
memmap([[0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0]], dtype=uint8)
>>> file(‘tem.dat‘).read()
‘\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00‘
>>> a[:]=ord(‘a‘)  # 加入的是a的ASCII码
>>> a.flush()
>>> file(‘tem.dat‘).read()
‘aaaaaaaaaa‘



到此,numpy中个人觉得比较重要的知识点就学习完了。接下来将会学习的是matplotlib绘图,后面还要学习一种python的UI,接下来是python opencv。敬请期待!


参考书目:

    《python科学计算》

    《机器学习实战》


python 科学计算学习一:numpy文件存取,内存映射,布布扣,bubuko.com

python 科学计算学习一:numpy文件存取,内存映射

上一篇:排列算法 C++实现


下一篇:C语言进阶总结3