在实际环境中,地震勘探产生的都是三维数据。有些地震资料在采集过程中出现了数据缺失等问题,造成我们用程序读取的时候容易出现异常,这种情况怎样解决呢?
01 课程回顾
在课程《地震数据处理实战入门》的第二课《怎样读取二维和三维地震数据?》,我给大家讲解了怎样使用segyio软件包读取三维数据的方法。
这个方法的主要原理是:使用程序读取出地震道头的信息,从中计算出inline和xline的数值。从而确定了三维数据中的x, y 两个维度的参数。
但如果遇到地震资料有缺失值的情况,可能造成维度参数与实际数据不匹配的情况。我们用一个案例来讲解。
02 案例讲解
这里我们选用的是一个F3_seismic.sgy三维资料,这是一个荷兰的数据,其中存在缺失值的情况。
首先是加载和读出整体的数据。
数据就是这样的:
这里data3D数组的第二维数值462就是三维数据体的z值。
然后需要读出inline和crossline的序列。
看起来像是这样的:
最后要计算出inline和crossline的跨度,即三维中最重要的x, y的数值。
这样就算出了x和y的结果:
到这里就出现问题了:我们读取到的data3D数组是(600515,462)的结构。这里的inline*crossline=619101,大于了数组中的600515。如果使用以下的代码出报错:
那我们怎样来解决这个问题呢?
如果直接更换数据维度报错,我们可以使用数组赋值的方法来解决。比如使用以下代码。
这段代码的关键在于先构建一个三维的空值数组。然后把读取到的数据向三维数组赋值。只要构造的三维数据维度大于读取数据,就可以赋值成功,这样就解决了原始数据有缺失值的问题。虽然这种方法可能会存在空值的情况,但不影响数据整体的使用。
相关的内容我们已经更新到了《地震数据处理实战入门》课程的《怎样读取二维和三维地震数据?》章节,完整程序请联系我获取。今天的课程就到这里,以后会持续更新和完善课程内容,再见。
我是科技州,用心分享智能地震勘探干货,带你一同进步。再见。
相关阅读:
网友评论