Skip to content

Latest commit

 

History

History
120 lines (84 loc) · 3.43 KB

ch08_文件的存取.md

File metadata and controls

120 lines (84 loc) · 3.43 KB
NumPy提供了多种文件操作函数方便我们存取数组内容。文件存取的格式分为两类:二进制和文本。而二进制格式的文件又分为NumPy专用的格式化二进制类型和无格式类型。

#使用数组的方法tofile和numpy的fromfile方法读取#

使用数组的方法函数tofile可以方便地将数组中数据以二进制的格式写进文件。tofile输出的数据没有格式,因此用numpy.fromfile读回来的时候需要自己格式化数据

示例:

#coding=utf-8
import numpy as np
arr1 = np.array([20, 14, 15, 20, 50, 61],dtype=np.int32)
#使用tofile存入到二进制文件中
arr1.tofile("myarr.bin")

#可以看出在使用fromfile时,如果不指定dtype且与存入文件时的数组类型一直,得到的值都与存入前不一致
arr2 = np.fromfile("myarr.bin")
print arr2
arr3 = np.fromfile("myarr.bin",dtype=np.float32)
print arr3
arr4 = np.fromfile("myarr.bin",dtype=np.int32)
print arr4

输出:

[2.97079411e-313 4.24399158e-313 1.29441743e-312]

[2.80259693e-44 1.96181785e-44 2.10194770e-44 2.80259693e-44 7.00649232e-44 8.54792063e-44]

[20 14 15 20 50 61]

#使用load()和save()

numpy.load和numpy.save函数以NumPy专用的二进制类型保存数据,这两个函数会自动处理元素类型和shape等信息,使用它们读写数组就方便多了,但是numpy.save输出的文件很难和其它语言编写的程序读入

示例

#coding=utf-8
import numpy as np
arr1 = np.array([20, 14, 15, 20, 50, 61],dtype=np.int32)
np.save("marry.npy",arr1) #
print np.load("marry.npy") #输出[20 14 15 20 50 61]

如果想要保存多个数组则可以使用np.savez("filename.npz",arr1,arr2)

示例

#coding=utf-8
import numpy as np
arr1 = np.array([20, 14, 15, 20, 50, 61],dtype=np.int32)
#使用np.savez保存多个数组在同一个文件中
arr2 = np.array([0, 4, 15, 20],dtype=np.int32)
np.savez("marry1.npz",arr1,arr2)
print np.load("marry1.npz")["arr_0"] #输出[20 14 15 20 50 61]
print np.load("marry1.npz")["arr_1"] #输出[ 0  4 15 20]

#使用loadtxt()和savetxt()读写带格式的文本文件(txt和csv)

语法:np.savetxt(filename,arr,fmt,delimiter)

filename:要保存的文件名

arr:要保存的数组

fmt:数据要保存的格式,默认为'%.18e'

delimiter:元素之间的分隔符

np.loadtxt(filename,dtype,usecols,delimiter,unpack)

filename:文件名

dtype:数据格式

usecols:要读取范围 如usecols=(6,7) 读取第7个第第8个字段

delimiter:元素之间的分隔符

unpack:意思是分拆存储不同列的数据,即分别usecols设置的字段数组赋值给多个变量,

如:np.loadtxt('data.csv', delimiter=',', usecols=(6,7), unpack=True)

示例:

#coding=utf-8
import numpy as np
arr1 = np.array([20, 14, 15, 20, 50, 61],dtype=np.int32)
arr6=arr1.reshape(3,2)
np.savetxt("marry.csv",arr6,fmt='%d',delimiter=",")
arr6=np.loadtxt("marry.csv",dtype=np.int32,delimiter=",")
#使用usecols选取部分字段并使用unpack分拆得到的数组到多个变量
c,v=np.loadtxt("marry.csv", dtype=np.int32, delimiter=",", usecols=(0,1), unpack=True)

示例2:利用numpy计算csv中各列的总和

marry.csv内容如下

20,14

15,20

50,61

import numpy as np
arr1=np.loadtxt("marry.csv",dtype=np.int32,delimiter=",")
res=arr1.sum(axis=0)
print res #输出[85 95]