python segy格式地震数据读写包segyio学习笔记(二)
最近大致搞明白了segyio读取叠后和叠前segy数据的方法,以及内部存储结构,以两段代码为例:
叠后数据读取。这是一个从给定时窗内提取每道的均方根振幅,然后进行拟合求取tar因子的简单代码:
import segyio
import numpy as np
import matplotlib.pyplot as plt
file = ‘/home/geou6/0922_j301_down_test.segy’
data =np.loadtxt(’/home/geou6/0922_j301_op_ampana.txt’
r = np.array([])
with segyio.open(file, iline=189, xline=21) as f:
for l in f.iline:
for t in l:
amp = np.sqrt(np.mean(t ** 2))
r = np.append(r, amp)
lnt = np.log(data[:, 2])
lnr = np.log
f_1 = np.polyfit(lnt, lnr, 1)
p_1 = np.poly1d(f_1)
print(f_1)
print(p_1)
plt.plot(data[:, 2], r)
plt.show()
plt.plot(lnt, lnr)
plt.show()
读取叠后数据时,第一个循环l in f.iline,这时l是一条illine线,第二重循环t in l中,t才是一个地震道,是一个一维的numpy数组。注意f.iline和并不是ndarray。他们的存储结构我还没有搞太明白,感觉是个类似生成器或者类的东西?
读取叠前数据时:
file = ‘/home/geou6/0922_j301_down_gather_test1.segy’
with segyio.open(file, iline=189, xline=21) as f:
print(f.gather[1 ,1][0:2]) #这时打印的1线1点的第一道
for m in f.gather[:, :]: #m是个道集和非一条illine线
for n in m: #n是地震道
print(n)
for k in f.gather[1, 1]:
for j in k: # k 是地震道, j 就是样点了
print(j)
注意f.gather[1, 1][0 :2]不能写成f.gather[1,1,1]或f.gather[1,1][0],f.gather[:, :]也不能写成f.gather,这个我还要继续去搞明白