您的位置:首页 > 编程语言 > Python开发

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

2014-02-28 15:27 525 查看
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科学计算》

    《机器学习实战》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  numpy python 数据 存储