龙空技术网

Numpy读写二进制数据和NCL二进制数据I/O

气象备忘录 126

前言:

当前小伙伴们对“python ncl包”大体比较讲究,我们都想要剖析一些“python ncl包”的相关资讯。那么小编同时在网摘上搜集了一些有关“python ncl包””的相关资讯,希望同学们能喜欢,我们快快来了解一下吧!

Numpy读写二进制数据Numpy.fromfile()

numpy.fromfile(file, dtype=float, count=-1, sep='')可以高效读取已知数据类型的二进制文件。file表示文件名,dtype表示数据类型(包括大小和字节顺序),count表示读入数据长度,sep表示文本文件的分隔符,默认为空表示读取二进制数据。

图片来自《利用python进行数据分析》第二版

>>>type = np.float32

>>>data = np.fromfile(file,dtype=type)

>>>lon , lat = data.reshape(2,2288,2288)

>>> lat

array([300., 300., 300., ..., 300., 300., 300.], dtype=float32)

>>> lat.dtype

dtype('float32')

前面提到数据类型除了包括大小,还包括字节顺序。字节顺序是通过对数据类型预先设定"<"或">"来决定的。"<"意味着小端法LittleEndian(最小值存储在最小的地址,即低位组放在最前面)。">"意味着大端法BigEndian(最重要的字节存储在最小的地址,即高位组放在最前面)。这里读入一个BigEndian数据,并强制转换其类型。

>>> cld = np.fromfile(file,dtype=">f4")

>>> cld

array([nan, nan, nan, ..., nan, nan, nan], dtype=float32)

>>> cld.dtype

dtype('>f4') #BigEndian

>>> t2 = np.dtype("<f4")

>>> cld = cld.astype(t2) #强制转换数据类型

>>> cld.dtype

dtype('float32')

NUmpy.tofile()

ndarray.tofile(fid, sep="", format="%s")可用于输出二进制文件(或者文本文件,sep,format),数据总是以“C”的顺序输出。

>>> cld.tofile(“test_out.bin”)

NCL二进制数据I/OFortran顺序

Direct Access:

data = fbindirread(path,rec,dim,type)

Sequential Access:

data = fbinrecread(path,rec,dim,type)

C 顺序

Cray (C block IO write):

data = cbinread(path,dim,type)

Cray Sequential:

data = craybinrecread(path,rec,dim,type)

此外同样需要注意big-endian 和 little-endian的区别,可以通过命令

setfileoption("bin","ReadByteOrder","LittleEndian")setfileoption("bin","WriteByteOrder","BigEndian")

控制文件的正确读取。

标签: #python ncl包