牛骨文教育服务平台(让学习变的简单)
博文笔记

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

创建时间:2014-02-28 投稿人: 浏览次数:121

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()
"x00x00x00x00x00x00x00x00x00x00"
>>> a[:]=ord("a")  # 加入的是a的ASCII码
>>> a.flush()
>>> file("tem.dat").read()
"aaaaaaaaaa"



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


参考书目:

    《python科学计算》

    《机器学习实战》


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。