首页 > 编程语言 >Python读取SU数据

Python读取SU数据

时间:2024-05-31 19:28:46浏览次数:23  
标签:set 读取 Python data SU read ax nt

SU数据格式

以下简称 Seismic Unix 为 SU 。SU 格式是 SEGY 的简化,没有前面3600字节文件头,故需要从第一道的道头获取需要的信息。这里默认所有道的采样点数即 nt 是一样的。

SEGY 和 SU 格式的道头都有 240 字节,但 SEGY 只有前 180 字节有信息,SU 的 181-240 字节定义了画图相关信息,可通过查看 SU 源码中的 segy.h 头文件获知。

SU 数据道头中主要的信息见下表:

字节格式描述

115-116

unsigned short该道采样点数。
117-118unsigned short该道采样间隔(微秒)。
189-192float各道之间的空间采样间隔。

Python代码

from matplotlib.colors import Normalize
import matplotlib.pyplot as plt
import numpy as np
import os
import struct


def read_su(path):
	data_size = os.stat(path).st_size
	byte2ushot = lambda x: struct.unpack('H', x)
	byte2float = lambda x: struct.unpack('f', x)
	with open(path, 'rb') as f:
		f.seek(114, 0)
		nt = byte2ushot(f.read(2))[0]
		dt = byte2ushot(f.read(2))[0]
		f.seek(70, 1)
		dx = byte2float(f.read(4))[0]
		nx = int(data_size / (4 * nt + 240))
		f.seek(0, 0)
		data = np.zeros((nx, nt), dtype='float32')
		for i in range(nx):
			f.seek(240, 1)
			dat = f.read(4 * nt)
			data[i] = np.array(struct.unpack('f' * nt, dat))
	return data, dt, dx


data, dt, dx = read_su('syndata3')
nx, nt = data.shape
dt /= 1e6

# 坐标轴刻度标签,注意根据需要调整
xtick = list(range(0, nx, 10))
xticklabel = [f'{i * dx:.2f}' for i in xtick]
ytick = list(range(0, nt, 10))
yticklabel = [f'{i * dt:.2f}' for i in ytick]
# 画图缩放参数,注意根据需要调整
zoom = 1
norm = Normalize(vmin=np.min(data) * zoom, vmax=np.max(data) * zoom)

fig, ax = plt.subplots()
ax.imshow(data.T, aspect='auto', norm=norm)
ax.xaxis.set_ticks(xtick)
ax.xaxis.set_ticklabels(xticklabel)
ax.yaxis.set_ticks(ytick)
ax.yaxis.set_ticklabels(yticklabel)
ax.set_xlabel('distance (m)')
ax.set_ylabel('time (s)')
plt.show(block=1)

运行结果

 注意

因为我 SU 装在虚拟机里,故不需要大小端转换,如有需要可参考Python读取大端SEGY数据

画图时根据自己的数据调整参数。

写 SU 数据可参考我之前发的Python读写SEGY数据的简单实现,但注意那篇文章是将信息写在前面3600字节文件头中,写 SU 数据时需将信息写入道头。

标签:set,读取,Python,data,SU,read,ax,nt
From: https://blog.csdn.net/qq_44741020/article/details/139359749

相关文章

  • sqlSugar 使用原生模式链接数据库
    usingSystem.Reflection;usingzhulongxu_webapi_pro.Tools;namespacezhulongxu_webapi_pro.Services{///<summary>///初始化数据库///</summary>publicstaticclassInitDataBaseService{publicstaticvoidInitDataBase......
  • Python实现SMA黏菌优化算法优化XGBoost回归模型(XGBRegressor算法)项目实战
    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。1.项目背景黏菌优化算法(Slimemouldalgorithm,SMA)由Li等于2020年提出,其灵感来自于黏菌的扩散和觅食行为,属于元启发算法。具有收敛速度快,寻优能力强的特点。主......
  • Python实现SMA黏菌优化算法优化LightGBM回归模型(LGBMRegressor算法)项目实战
    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。1.项目背景黏菌优化算法(Slimemouldalgorithm,SMA)由Li等于2020年提出,其灵感来自于黏菌的扩散和觅食行为,属于元启发算法。具有收敛速度快,寻优能力强的特点。主......
  • 黑客团伙利用Python、Golang和Rust恶意软件袭击印国防部门;OpenAI揭秘,AI模型如何被用于
    巴黑客团伙利用Python、Golang和Rust恶意软件袭击印度国防部门!与巴基斯坦有联系的TransparentTribe组织已被确认与一系列新的攻击有关,这些攻击使用Python、Golang和Rust编写的跨平台恶意软件,针对印度政府、国防和航空航天部门。“这一系列活动从2023年底持续到2024年4月......
  • visual studio IDE 17.10版本 折叠区域高亮问题
    最近vs更新到了17.10版本发现折叠的区域会高亮效果如下 可以看到折叠的区域会呈现一种高亮显示我个人是觉得会分散我注意力下面是关掉的操作 把红框改成自动(ps:可以打中文"可"快速定位到"可折叠区域")这样改完后效果如下 ......
  • Visual Studio 2022安装SVN插件教程
    原文链接:https://blog.csdn.net/weixin_44504146/article/details/1328311011.第一步:避免踩坑,超级重要!!!关闭VisualStudio2022应用程序;(不然插件装不上,一直转圈!)2.第二步:下载VisualStudio2022版本对应的SVN插件https://www.visualsvn.com/visualsvn/download/(注意对应版本20......
  • vs2022安装 社区版/Visual Studio 2022 Professional、Enterprise安装教程
    原文链接:https://zhuanlan.zhihu.com/p/472099786https://blog.csdn.net/qq_38390060/article/details/129580789一、Windows安装VisualStudio20221.1下载地址首先登陆VisualStudio官网:https://visualstudio.microsoft.com/zh-hans/ 2、我们双击开始安装之后会弹出安......
  • python selenium mysql -- 数据爬取2
    fromseleniumimportwebdriverfromselenium.webdriver.common.byimportBydriver=webdriver.Chrome()driver.get('https://www.00ksw.com/html/120/120704/')zj_list=[]#使用更健壮的XPath或CSS选择器links=driver.find_elements(By.XPATH,'/html/bo......
  • 机器学习python实践中对于决策函数(decision_function)的一些个人思考
    最近在利用python进行实践训练,但是跟着参考书学习到SVM的时候,示例代码里突然出现了一个函数——decision_function(),让我很懵逼,帮助文档里的英文翻译过来说啥决策函数、ovr、ovo之类的,让我整个人更晕了,因为我在理论部分参考的是周志华老师的《西瓜书》,而《西瓜书》中并没有对这......
  • 【二】从小白开始使用Python一步一步搭建一个深度学习UI界面【界面设计】
    本来是想使用QtDesigner进行界面控件拖拽的方式进行界面设计的,但是后来觉得这样后面维护更新起来太麻烦了,就还是使用纯代码来写界面吧,这需要一定的想象能力。设计界面pyqt外部工具添加在设置界面搜索“外部工具”,这里我已经添加了两个QTDesigner的外部工具,一个是用于创......