01 二维数据保存
1. 保存为SEGY数据
这次课程用的二维剖面数据还是Model94_shots.segy,这是1994年的加拿大逆掩岩综合数据集。具体数据情况见前面课程介绍。
原始数据概况是这样的 :
原数据尺寸是(2000,123600)特别大,现在我们读取(500,500)的剖面来显示:
那么怎样将数据保存为SEGY格式呢?关键就是以下部分的程序了。
这里有几个关键点讲一下:
一是道的排序格式,选1或2区别不大。
二是编码格式最好选5,即IEEE浮点格式。
三是tracecount是道数。
四是np.arange()函数生成的是一个等差数列。其中的4是抽样频率,2000是采样点数500乘以4得来的。
这样就轻松生成了SEGY了数据。
使用程序来显示剖面,可以看到和原始数据看的剖面是一样的。
2.保存为二进制格式数据
保存为二进制文件的方法有两种。
第一种方法是tofile法,这种方法大家用得比较多。保存和读取数据的关键代码是这样的:
第二种方法是save法,保存和读取数据的关键代码是这样的:
这两种方法都是将数据保存为二进制数据,但是区别有哪些呢?
首先说说tofile法。
一是tofile函数只能将数组保存为二进制文件,文件后缀名没有固定要求。
二是这种保存方法对数据读取有要求,np.fromfile 需要手动指定读出来的数据的的dtype,如果指定的格式与保存时的不一致,则读出来的就是错误的数据。
三是tofile函数不能保存当前数据的行列信息,不管数组的排列顺序是C语言格式的还是Fortran语言格式,统一使用C语言格式输出。因此使用 np.fromfile 读出来的数据是一维数组,需要利用reshape指定行列信息。但是这也隐藏了一个很大的优势,就是可以保存任意维度的数据,这也是这种方法为大家青睐的原因。
再来说说save法。
一是save函数将数组以未压缩的原始二进制格式保存在扩展名为npy的文件中,文件后缀名是固定的哦。
二是这种保存方法对二进制数据读取没有要求,np.load就可以直接读出数据,不用管数据的类型和维度。
三是使用 np.savetxt 和 np.loadtxt 只能读写 1 维和 2 维的数组,因此对于三维文本数据无能为力了。不过np.save保存三维数据毫无压力,大家可以放心使用。
02 三维数据保存
这次的三维数据同样是使用前面课程的Kerry3D.segy,用的是1996年新西兰塔拉纳基盆地叠前数据。这个数据概貌是这样的:
三维数据一般都比较大也比较复杂,普通软件打开SEGY三维数据非常困难,因此一般没有再考虑保存为三维的SEGY数据。作为数据处理来使用,我们一般考虑将三维数据保存为二进制数据。保存的方法和二维数据的原理是一样的。
第一种方法是tofile法,保存和读取数据的关键代码是这样的:
第二种方法是save法,保存和读取数据的关键代码是这样的: