当前位置: 首页 > news >正文

HDF5文件

掌握HDF5文件:先理解核心结构(打基础),再学C#读写库(搭环境),最后实战读写操作(练手)

全程结合代码示例,确保新手能跟上。

阶段1:先搞懂HDF5文件的核心结构(必须先理解!)

HDF5(Hierarchical Data Format 5)是一种分层结构的二进制文件格式,专门用于存储和管理大规模、复杂的科学数据。可以把它想象成“计算机里的文件柜”,结构逻辑和我们日常整理文件的方式高度一致。

1.1 核心概念:3个“抽屉”和“文件”

HDF5的结构由3个核心对象组成,用“文件柜”类比理解:

HDF5对象 类比(文件柜) 核心作用 举例(数据采集场景)
File(文件) 整个文件柜 最顶层容器,所有数据都放在一个.h5文件里,是读写操作的入口。 sensor_data.h5(存储所有传感器的采集数据)
Group(组) 文件柜里的“文件夹” 用于分类管理数据,支持嵌套(像文件夹里套文件夹),实现数据的分层组织。 /Device1/Channel1(设备1的1号通道数据文件夹)
Dataset(数据集) 文件夹里的“表格/文件” 真正存储数据的地方,类似数组(支持1维、2维、N维),还包含数据的元信息。 temperature(存储温度数据的1维数组)

HDF5 的结构是一个严格的树状层次结构,其中只有 Group 节点可以分支,而 Dataset 节点永远是叶子节点。

HDF5文件根节点下面可以直接的Group或Dataset;
Group可以嵌套group;
Dataset(数据集) 是 数据对象。它的作用是存储一个多维数组及其相关的元数据(如数据类型、维度信息)。它是数据的最终载体,不能包含任何其他 HDF5 对象(不能包含其他 Dataset,也不能包含 Group);

1.2 关键补充:Metadata(元数据)

数据集(Dataset)不仅存数据,还绑定“元数据”——描述数据的附加信息,比如:

  • 数据类型(int32、float64)
  • 数据维度(1000个点→1维,100×200像素→2维)
  • 单位(温度:℃,时间:ms)
  • 采集时间(2024-05-01 10:00:00)

元数据是HDF5的灵魂,能让数据“自描述”,别人拿到文件也能看懂数据含义。

在 HDF5 中,根节点、Group(组)、Dataset(数据集)都可以拥有自己的元数据(Metadata),这是 HDF5 格式灵活性的重要体现。

元数据以 “属性(Attribute)” 的形式存在,可以为任何 HDF5 对象(包括根节点、Group、Dataset)添加描述性信息。

Attribute = 贴在抽屉、文件夹或文件上的便利贴(元数据)。便利贴很小,但提供了至关重要的上下文信息。

1、元数据的本质是 “属性(Attribute)”

HDF5 中没有单独的 “元数据对象”,元数据通过 “属性” 绑定到其他对象上,属性本身也是一种 HDF5 对象(有自己的 ID,需要手动关闭)。

2、添加元数据的通用流程

无论给哪种对象添加元数据,步骤都相同:
创建属性数据空间(H5S)→ 创建属性(H5A.create)→ 写入属性值(H5A.write)→ 关闭属性(H5A.close)

3、元数据的类型

元数据支持所有 HDF5 基础类型(整数、浮点数、布尔等),也支持复合类型(如结构体)。

4、根节点的特殊性

根节点没有单独的 “创建” 方法(文件创建时自动生成),其 ID 就是文件的 ID(fileId),因此给根节点添加属性时,objectId参数直接传fileId即可。

阶段2:C#操作HDF5的“工具”——选择合适的库

C#本身不自带HDF5读写API,需要借助第三方库。新手优先推荐HDF.PInvoke(底层封装,灵活)或MathNet.Numerics(结合科学计算,简化API),这里我们用最通用的HDF.PInvoke(支持.NET Framework/.NET Core/.NET 5+)。

2.1 环境搭建(3步搞定)

  1. 安装NuGet包
    在Visual Studio的“解决方案资源管理器”中,右键项目→“管理NuGet程序包”,搜索并安装 HDF.PInvoke(选择最新稳定版)。

  2. 引用命名空间
    所有操作都需要这2个命名空间:

    using System;
    using HDF.PInvoke; // 核心API都在这里
    
  3. 核心原则
    HDF5的API是C风格的非托管代码,必须严格遵守“打开→操作→关闭”的流程(类似文件流),否则会导致内存泄漏或文件损坏!

阶段3:实战!C#读写HDF5文件(从简单到复杂)

我们以“存储传感器数据”为例,先写后读,覆盖90%的基础场景。

3.1 基础:写HDF5文件(创建Group+Dataset+元数据)

需求:创建sensor_data.h5,在/Device1/Channel1组下,存储1000个温度数据(float类型),并添加“单位”“采集时间”元数据。

完整代码(含注释)

using System;
using HDF.PInvoke;namespace HDF5Demo
{class Program{static void Main(string[] args){// 1. 定义文件路径和数据string hdf5Path = "sensor_data.h5";string groupPath = "/Device1/Channel1"; // 组路径(支持嵌套)string datasetName = "temperature";     // 数据集名称int dataCount = 1000;                   // 数据长度float[] temperatureData = new float[dataCount];// 生成模拟温度数据(0~50℃)Random rand = new Random();for (int i = 0; i < dataCount; i++){temperatureData[i] = (float)rand.NextDouble() * 50;}// 2. 打开/创建HDF5文件(核心:H5F.create)// 参数说明:路径、创建模式(TRUNC=覆盖已有文件)、默认属性、默认访问权限int fileId = H5F.create(hdf5Path, H5F.ACC_TRUNC, H5P.DEFAULT, H5P.DEFAULT);if (fileId < 0) // HDF5 API用负数表示错误{Console.WriteLine("创建文件失败!");return;}try{// 3. 创建Group(类似创建文件夹,H5G.create)int groupId = H5G.create(fileId, groupPath, H5P.DEFAULT, H5P.DEFAULT, H5P.DEFAULT);if (groupId < 0){Console.WriteLine("创建组失败!");return;}// 4. 定义Dataset的维度(H5S:数据空间)long[] dims = { dataCount }; // 1维数据,长度1000int spaceId = H5S.create_simple(1, dims, null); // 1=维度数,dims=各维度长度if (spaceId < 0){Console.WriteLine("创建数据空间失败!");return;}// 5. 创建Dataset(H5D.create)// 参数:组ID、数据集名称、数据类型(H5T.IEEE_F32LE=32位小端float)、数据空间ID、默认属性int datasetId = H5D.create(groupId, datasetName, H5T.IEEE_F32LE, spaceId, H5P.DEFAULT, H5P.DEFAULT, H5P.DEFAULT);if (datasetId < 0){Console.WriteLine("创建数据集失败!");return;}// 6. 向Dataset写入数据(H5D.write)// 参数:数据集ID、数据类型、内存空间(默认)、文件数据空间(默认)、传输属性(默认)、数据数组int writeStatus = H5D.write(datasetId, H5T.IEEE_F32LE, H5S.ALL, H5S.ALL, H5P.DEFAULT, temperatureData);if (writeStatus < 0){Console.WriteLine("写入数据失败!");return;}// 7. 给Dataset添加元数据(属性,H5A)// 7.1 添加“单位”属性(字符串类型)string unit = "℃";int unitAttrId = H5A.create(datasetId, "Unit", H5T.C_S1, H5S.create(H5S.class_t.SCALAR), H5P.DEFAULT, H5P.DEFAULT);H5A.write(unitAttrId, H5T.C_S1, unit);H5A.close(unitAttrId); // 写完属性立即关闭// 7.2 添加“采集时间”属性(字符串类型)string collectTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");int timeAttrId = H5A.create(datasetId, "CollectTime", H5T.C_S1, H5S.create(H5S.class_t.SCALAR), H5P.DEFAULT, H5P.DEFAULT);H5A.write(timeAttrId, H5T.C_S1, collectTime);H5A.close(timeAttrId);Console.WriteLine("HDF5文件写入成功!");// 8. 关闭资源(顺序:先关子对象,再关父对象)H5D.close(datasetId);H5S.close(spaceId);H5G.close(groupId);}finally{// 最终必须关闭文件(即使中间出错)H5F.close(fileId);}}}
}

关键知识点拆解

  • 文件创建模式H5F.ACC_TRUNC(覆盖已有文件)、H5F.ACC_EXCL(若文件存在则报错)、H5F.ACC_RDWR(读写打开已有文件)。
  • 数据类型对应:C#的floatH5T.IEEE_F32LE(32位小端浮点数),doubleH5T.IEEE_F64LEintH5T.STD_I32LE
  • 资源关闭顺序:Dataset → DataSpace → Group → File(类似先关文件,再关文件夹,最后关文件柜)。

3.2 基础:读HDF5文件(读取Group+Dataset+元数据)

需求:读取上一步创建的sensor_data.h5,获取/Device1/Channel1/temperature的数据集数据和元数据。

完整代码(含注释)

using System;
using HDF.PInvoke;namespace HDF5Demo
{class Program{static void Main(string[] args){// 1. 定义文件路径和目标路径string hdf5Path = "sensor_data.h5";string datasetPath = "/Device1/Channel1/temperature"; // 数据集完整路径(组+数据集)// 2. 打开HDF5文件(只读模式:H5F.ACC_RDONLY)int fileId = H5F.open(hdf5Path, H5F.ACC_RDONLY, H5P.DEFAULT);if (fileId < 0){Console.WriteLine("打开文件失败!");return;}try{// 3. 打开Dataset(H5D.open)int datasetId = H5D.open(fileId, datasetPath, H5P.DEFAULT);if (datasetId < 0){Console.WriteLine("打开数据集失败!");return;}// 4. 获取Dataset的维度(确定数据长度)int spaceId = H5D.get_space(datasetId); // 获取数据空间int rank = H5S.get_simple_extent_ndims(spaceId); // 维度数(这里是1)long[] dims = new long[rank];H5S.get_simple_extent_dims(spaceId, dims, null); // 获取各维度长度int dataCount = (int)dims[0]; // 数据总长度// 5. 读取Dataset数据(H5D.read)float[] readData = new float[dataCount];int readStatus = H5D.read(datasetId, H5T.IEEE_F32LE, H5S.ALL, H5S.ALL, H5P.DEFAULT, readData);if (readStatus < 0){Console.WriteLine("读取数据失败!");return;}// 6. 读取Dataset的元数据(属性)// 6.1 读取“Unit”属性string unit = string.Empty;if (H5A.exists(datasetId, "Unit") > 0) // 先判断属性是否存在{int unitAttrId = H5A.open(datasetId, "Unit");unit = H5A.read<string>(unitAttrId); // 泛型读取,简化字符串处理H5A.close(unitAttrId);}// 6.2 读取“CollectTime”属性string collectTime = string.Empty;if (H5A.exists(datasetId, "CollectTime") > 0){int timeAttrId = H5A.open(datasetId, "CollectTime");collectTime = H5A.read<string>(timeAttrId);H5A.close(timeAttrId);}// 7. 打印读取结果(只打印前10个数据,避免输出过长)Console.WriteLine("=== HDF5文件读取结果 ===");Console.WriteLine($"采集时间:{collectTime}");Console.WriteLine($"数据单位:{unit}");Console.WriteLine($"数据长度:{dataCount}");Console.Write("前10个数据:");for (int i = 0; i < 10; i++){Console.Write($"{readData[i]:F2} ");}Console.WriteLine();// 8. 关闭资源H5D.close(datasetId);H5S.close(spaceId);}finally{H5F.close(fileId);}}}
}

运行结果示例

=== HDF5文件读取结果 ===
采集时间:2024-05-20 15:30:00
数据单位:℃
数据长度:1000
前10个数据:12.34 25.67 8.91 45.23 33.45 19.87 7.65 39.01 22.33 48.76 

3.3 进阶:读写2维数据(比如图像、矩阵)

如果要存储200×300的图像像素数据(2维数组),只需修改“数据空间”的维度定义:

写2维数据(核心代码片段)

// 2维数据:200行(高度)×300列(宽度)
int rows = 200;
int cols = 300;
float[,] imageData = new float[rows, cols]; // 2维数组// 定义2维数据空间
long[] dims = { rows, cols }; // 第1维=行,第2维=列
int spaceId = H5S.create_simple(2, dims, null); // 维度数改为2// 写入2维数据(直接传2维数组即可)
H5D.write(datasetId, H5T.IEEE_F32LE, H5S.ALL, H5S.ALL, H5P.DEFAULT, imageData);

读2维数据(核心代码片段)

// 获取2维维度
long[] dims = new long[2];
H5S.get_simple_extent_dims(spaceId, dims, null);
int rows = (int)dims[0];
int cols = (int)dims[1];// 读取2维数据
float[,] readImage = new float[rows, cols];
H5D.read(datasetId, H5T.IEEE_F32LE, H5S.ALL, H5S.ALL, H5P.DEFAULT, readImage);

阶段4:新手避坑指南(必看!)

  1. 资源泄露:忘记关闭fileId/datasetId等,会导致文件被占用(删除不了),必须用try-finally确保关闭。
  2. 数据类型不匹配:C#的int是32位,若写成H5T.STD_I64LE(64位),会读写出错,务必对应(参考下表)。
  3. 路径错误:Group/Dataset路径必须以/开头(如/Device1,不能写Device1)。

C#与HDF5数据类型对应表

C#类型 HDF5类型常量 说明
byte H5T.STD_U8LE 8位无符号整数
short H5T.STD_I16LE 16位有符号整数
int H5T.STD_I32LE 32位有符号整数
long H5T.STD_I64LE 64位有符号整数
float H5T.IEEE_F32LE 32位浮点数
double H5T.IEEE_F64LE 64位浮点数
string H5T.C_S1 C风格字符串(null结尾)

阶段5:扩展学习(进阶方向)

  1. 更友好的库:如果觉得HDF.PInvoke太底层,可以试试 HDF5DotNet(封装更面向对象)或 MathNet.Numerics.Data.Hdf5(结合科学计算库)。

相关文章:

HDF5文件

掌握HDF5文件:先理解核心结构(打基础),再学C#读写库(搭环境),最后实战读写操作(练手)。 全程结合代码示例,确保新手能跟上。 阶段1:先搞懂HDF5文件的核心结构(必须先理解!) HDF5(Hierarchical Data Format 5)是一种分层结构的二进制文件格式,专门用于存储和管…...

Error encountered when performing Introspect the Portion of idea Introspect using JDBC metadata在哪设置

Error encountered when performing Introspect the Portion of 最新解决方案&新版本idea Introspect using JDBC metadata在哪设置?前言 使用idea2025专业版(MAC)连接mySQL后无法显示表结构,并且报错 Error encountered when performing Introspect the Portion of 1 …...

核桃 CSP-S 模拟

核桃 CSP-S 模拟 T3 题意: 给定一个 \(01\) 串,选定一个操作序列,每次从原串中删除一个数,保持原串中相对顺序不变,把形成的新字符串加入答案字符串,求出本质不同答案字符串总数。 其中 \(n\le 400\) 思路: 我们不妨把题意转化一下,对于每一个节点赋值 \(t_i\) 表示 \(…...

正确输入连字号、连接号、破折号和负号

转载:Pigman - 博客园: 正确输入连字号、连接号、破折号和负号论文书写和报告编制中,经常出现连字号、连接号、破折号和负号的混淆使用,既不符合规范也影响文档美观。下面对这组符号进行区分,并给出word下正确输入方法。连字号 (Hyphen),[-] 1) 英语中的复合词,…...

9 月记录

P13644 K-LCA 给出树和 \(k\),每次询问给出区间 \([l,r]\),找到选择 \(k\) 个区间内的点使得 LCA 深度最大。 \(n,q\le 10^5,1<k\le n\)。考虑回滚莫队,每次加入一个点,二分最深的子树个数 \(\ge k\) 的祖先,可以做到两个 \(\log\)。 考虑树链剖分,标号是先标号轻儿子…...

python基础-元组

元组: 一个元组可以存储多个数据,切元组内的数据是不可更改 t1 = (10,20,30)t2 = (10,)t3 = 10, 元组操作:元组不支持修改,只支持查找tuple.index()访问:下标访问: tuple[index]统计某项元素出现的次数: tuple.count(item)元组的长度: length = len(tuple)目标元素的位置…...

.net core中获得程序集以及注入框架的方法总结

虚方法public class Animal { // 虚方法 public virtual void MakeSound() { Console.WriteLine("动物发出声音"); } }public class Dog : Animal { // 重写虚方法 public override void MakeSound() { Console.WriteLine("汪汪汪!"); } }var sss = Assem…...

python基础篇-list(列表)

list:列表中可以一次性存储多个数据,且数据项的类型可以不同 常见操作:1.查找下标访问,查找某个位置的数据项: list[index]查找某个数据项首次出现的下标: list.index[item, 开始位置下标, 结束位置下标];如果存在则返回出现位置下标,如果不存在,则报错出现的次数: li…...

vscode使用powershell中文乱码

VSCode使用终端中文乱码 原因: vscode编辑文本默认使用utf-8,但是windows的终端默认使用gbk(简体中文)编码。utf-8采用1-4位记录一个字符,其中中文采用3位。gbk采用两位记录一个中文字符。所以中文显示乱码。 解决方案:先确认终端是中文编码,在终端输入chcp,若输出936表…...

关于如何读懂 P11832 [省选联考 2025] 图排列?

题面太形式化了! 我!根!本!读!不!懂! 这题想要拿分必须转化题面。 初步转化 他只给了我们 \((p_{a_i},p_{b_i})\),然后让我们去找最小的 \(p\)? 没给我 \(a_i,b_i\)?\(a_i,b_i\) 不用刻意构造出来,我们只需要时刻保证 \(a_i,b_i\) 的限制就可以了。 假设我们拿到了最…...

Untitled

Untitled展开思考过程 Hinted 3/5 似乎没有性质,因此考虑做一步转化。 考虑一个点若被同种边通过大于 2 次,那么 必然有一次没有用,考虑每条边可以是区间 +1 或者是区间 -k(k 足够大),要求最终每个点 <0 并且绝对值不是 k 的倍数 让我想到同余最短路,但是我们可以考虑…...

敏感性分析

什么是敏感性分析? 数学模型只是实际问题的一个粗略的抽象,最优解也只是针对某一特定的数学模型。管理者要对未来做各种假设,在这些假设下,测试可能产生的结果,通过对各种结果深入分析来指导决策。通常,在取得最初版本模型的最优解之后,进行分析 才能取得对问题深入的认…...

完整教程:论园区电气安全管理系统的重要性

完整教程:论园区电气安全管理系统的重要性pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !impo…...

基于CSU8RP1186芯片的握力器解决方案

握力器方案采用高精度传感器、ADC芯片和先进的数据处理技术,可将物体的重量以千克和磅为单位进行准确测量和记录,其原理是通过在称重时,握力器传感器的金属构架受力形变,贴片上的金属丝也随着被拉长或缩短,金属丝电阻因此改变,通过测量金属丝的电阻变化,得到所称重物的数…...

亮相2025年服贸会,天翼云打造高质量算力服务新生态!

近日,2025年中国国际服务贸易交易会(简称服贸会)在北京隆重举行。本届服贸会以“数智领航,服贸焕新”作为年度主题,顺应服务贸易数字化、智能化、绿色化趋势,聚焦人工智能、医疗健康、智慧物流、商旅文体健融合发展等专业领域,展示多个国家和地区的创新发展成果。天翼云…...

易路薪酬专家Agent:基于10亿级数据与AI的智能薪酬解决方案

导读: 在AI深度赋能人力资源管理的趋势下,薪酬模块的智能化已成为企业提升人效与战略决策的关键。本文深度解析易路人力资源科技公司最新推出的人才薪酬专家Agent,重点介绍其基于10亿级动态市场数据与多智能体协同(市场数据Agent、薪酬诊断Agent、竞品招聘动态Agent)的核心…...

有点意思!Java8后最有用新特性排行榜!

相信这两天看了 JDK 25 新特性的同学已经彻底对 Oracle 失望了,这那是挤牙膏啊?是连牙膏都懒得挤了。 所以,大家都在评论区喊话,如果你(Oracle)实在不想发可以不发,但不要糊弄大家。 那么,今天呢。我也把从 JDK 8 之后的长期支持版:JDK11、JDK17、JDK21、JDK25 的新特…...

数据结构 Trick 之:KDT 求 k 近/远 点

注意,此 Trick 的时间复杂度是错的,但是貌似目前没人能卡满。 能够解决的问题\(O(n \sqrt n)\) 可过。 维护二维平面。 每次求到一个点的 \(k\) 近或 \(k\) 远点。 \(k\) 很小(\(20\) 左右)思路 二维空间想到 KDTree(TreeKevin Durant Tree)。 众所周知,动态维护 \(k\) …...

.NET 8程序配置版本及产品信息

一、给主程序单独添加配置 1、双击主程序,会打开主程序的.csproj文件,在PropertyGroup下添加 <Company>Your Company</Company><Product>Your Product</Product><Version>1.2.3</Version><FileVersion>1.2.3.0</FileVersion…...

C语言第二讲:进制转化

C语言中进制转化的符号表示进制 数据类型 赋值格式二进制 %0b a=0b1010八进制 %o a=03344十进制 %d a=1234十六进制 %x/%X a=0x34a5 / 0X43D6输出时转化: int a=100; printf("%o",a); 赋值时转化: int a; a=03355//赋值为八进制数...

XXL-JOB(4)

XXL-JOB(4)分片任务 分片任务能更好的利用集群的能力,可以同时调度多个机器并行运行任务。分片任务的实现原理包括以下几个核心步骤:1、任务分配当一个分片任务被触发时,调度器会根据任务的分片参数决定需要多少个执行器参与任务。每个执行器或执行线程会接收到一个分片索…...

QOJ #10485. Peculiar Protocol 题解

Description 你有一个序列 \(a_1, a_2, \dots, a_n\),以及两个参数 \(d, r\)。 你可以做如下操作若干次:每次选择一段区间,使得他们的和可以被表示成 \(k \times d + r\) 的形式,其中 \(k\) 是一个非负整数。 你把 \(k\) 加入分数中,然后在序列中删去这一段,剩下的序列合…...

C++ 常用关键字

1. static 控制作用域、生命周期或类成员归属 // 1. 全局/命名空间:仅当前文件可见(避免跨文件重定义) static int global_static = 10; // 其他文件无法通过 extern 访问// 2. 局部变量:生命周期延长至程序结束(仅初始化1次) void counter() {static int cnt = 0; cnt++…...

【AP出版】第四届数理统计与经济分析国际学术会议 (MSEA 2025)

第四届数理统计与经济分析国际学术会议 (MSEA 2025)将于2025年12月05-07日在中国广州召开。【高录用快见刊:最快一周内即可录用,会后3-4个月见刊】 【征稿范围:数理统计、经济分析大方向主题均可收稿】 第四届数理统计与经济分析国际学术会议 (MSEA 2025) 2025 4th Internat…...

数据结构 Trick 之:区间子区间计数

能够解决的问题\(O(n \log n)\) 可过。 维护数列,无修改,每次查询一个区间的所有子区间。 离线思路 看到一个区间的所有子区间这种查询,直接做显然是做不了的。 考虑离线,那么将询问区间进行右端点排序,然后就可以扫描线搞掉一维。 我们从左往右枚举 \(r\) 维护线段树 \(t…...

mapstruct.Mapper|Mapping详解

------------------------------------------------------------------------------------------ org.mapstruct.Mapper 和 org.mapstruct.Mapping 是 MapStruct 框架中的核心注解,用于实现 Java 对象之间的自动映射。MapStruct 是一个代码生成器,通过注解配置生成类型安全、…...

抽象代数-学习笔记

主要积累一些遇到的例子、题目。不定时更新。 运算有结合律的运算:普通/复数/矩阵/模意义下加法、乘法,映射复合,与或异或/集合相关, min/max。 仅仅满足部分群公理:\(\mathbb{N}^*, \mathbb{N}\)。\(\{0,1,2\}\) 上可构造有单位元、有逆元但无结合律的运算。 域的性质仅仅…...

如何在保证质量的前提下,快速完成一份 PPT?

这是一个非常经典且普遍的问题,尤其对于产品经理、咨询顾问等角色来说,PPT既是生产力工具,也是时间吞噬黑洞。你能意识到这个问题并寻求解决方案,已经领先了很多人。 在保证质量的前提下快速完成PPT,绝非单纯追求“手速”,而是一套系统工程,涉及工作流程、工具链、方法论…...

Source Code Summarization in the Era of Large Language Models 论文笔记

介绍 (1) 发表:ICSE25 (2) 背景 之前的研究表明,与传统的代码摘要模型相比,LLM 生成的摘要在表达方式上与参考摘要有很大不同,并且倾向于描述更多的细节。因此,传统的评估方法是否适合评估 LLM 生成摘要的质量仍然未知 (3) 贡献 受到 NLP 工作的启发,本文对使用 LLM 本身…...

线性回归-入门案例

使用公开的房价数据集进行预测,数据包含8个特征1个目标值 特征最多使用2次幂代码示例 import numpy as np import pandas as pd from sklearn.datasets import fetch_california_housing from sklearn.linear_model import LinearRegression from sklearn.metrics import mean…...

XXL-JOB(3)

XXL-JOB(3)开发Bean模式(基于方法)Bean模式任务,支持基于方法的开发方式,每个任务对应一个方法。基于方法开发的任务,底层会生成JobHandler代理,和基于类的方式一样,任务也会以JobHandler的形式存在于执行器任务容器中。优点:每个任务只需要开发一个方法,并添加”@Xxl…...

ClickHouse 表引擎深度解析:ReplacingMergeTree、PARTITION、PRIMARY KEY、ORDER BY 详解 - 若

ClickHouse 表引擎深度解析:ReplacingMergeTree、PARTITION、PRIMARY KEY、ORDER BY 详解 前言 ClickHouse 作为高性能的列式数据库,其表引擎设计是其核心优势之一。ReplacingMergeTree 是处理重复数据的利器,而 PARTITION、PRIMARY KEY、ORDER BY 等配置直接影响查询性能和…...

UOS统信服务器操作系统V20(1070)安装mysql8.4.5(建议安装glibc2.28版本)

环境:OS:UOS Server 20 统信服务器操作系统V20(1070)mysql:8.4.5 glib.2.17 操作系统下载https://www.chinauos.com/resource/download-server查看系统glibc版本[root@localhost yum.repos.d]# ldd --versionldd (GNU libc) 2.28Copyright (C) 2018 Free Software Foundation, …...

web5(phps源码泄露)

访问index.phps,会自动下载index.php文件 点击查看即可得到flag...

web3(自带网络工具包查看数据)

查看源码什么也没有扫目录也什么都没有只能说信息收集能力还欠佳, 我们可以先尝试使用浏览器自带的网络工具查看一下数据包。...

web17(备份的sql文件泄露)

用常见的数据库工具打开即可...

web11(通过Dns检查查询Flag)

:::info 223.5.5.5测试的解析结果是否具有代表性?(来自阿里云官网)具备一定的代表性,在国内客户端使用223.5.5.5有一定的用户群体,但是该测试结果并不能代表全部用户;如果223.5.5.5测试已经生效,但是您本地仍然不能访问,那么可以侧面反映至少使用223.5.5.5的Local DNS用户…...

ctfshow_web11

ctf.show_web11简单的代码审计,这段代码定义了一个名为replaceSpecialChar的函数,该函数接受一个字符串$strParam作为参数。函数内部使用了正则表达式$regex来匹配SQL语句中的一些关键字,包括select、from、where、join、sleep、and、空格\s、union和逗号,。preg_replace($r…...

ctfshow_web13

ctf.show_web13今天也算是碰到一个新类型的文件上传类的题目(与文件包含结合了可以说)首先尝试了直接传一句话木马,全都被ban了,算是没招了就扫了下目录,进去看一眼,好像页面没回显什么东西,再试试看upload.php.bak(这里看备份文件算是一种新思路,说不定过滤了什么东西…...

ctfshow_web9

ctf.show_web9尝试爆破无果,应该不是弱口令爆破题,那么我们就扫一下目录进去看看访问该目录后会自动下载一个php文件,打开看看可以看出这是一个sql注入漏洞,通过post传参一个paasword的变量值。经过md5加密后被用来与用户名匹配 md5($pass, true) 返回的是 MD5 哈希的二进制…...

锁屏界面无法通过任意键弹出开机密码

长按ctrl+alt+delete弹出...

应急响应-日志分析 - voasem

web服务器日志在很多时候,我们经常需要分析网站的日志,以此来查看网站运行的各种情况。比如说如果网站被攻击,我们可以通过查看日志来溯源攻击者。 Apache 日志目录:/Apache/logs/logs目录下有两个文件,一个是 access.log ,就是用户的访问日志。还有一个是 error.log,这…...

ctfshow web 10

ctfshow web 10打开题目长这样,点击取消会自动下载indexs.php文件,打开查看源码 <?php$flag="";function replaceSpecialChar($strParam){$regex = "/(select|from|where|join|sleep|and|\s|union|,)/i";return preg_replace($regex,"",$s…...

【ACM出版】第四届公共管理、数字经济与互联网技术国际学术会议(ICPDI 2025)

第四届公共管理、数字经济与互联网技术国际学术会议(ICPDI 2025)定于2025年9月26-28日在中国-北京举行。【高录用快见刊、检索:审稿录用速度快】 【录用信息完整:含ISSN号,DOI,封面目录】 第四届公共管理、数字经济与互联网技术国际学术会议(ICPDI 2025) The 4th Inter…...

SMA的射频连接器

SMA的射频连接器射频相关的器件和应用设备经常会用到各种各样的射频连接器,这里将介绍一部分常用的连接器。上图是不同型号的连接器的使用频率,这里仅供参考,因为随着工艺和科技的发展,各个型号的连接器使用频率范围可能会有所变化。SMA连接器SMA型射频同轴连接器是Bendix公…...

什么是Elasticsearch?它与其他搜索引擎相比有什么优势?

一、Elasticsearch 是什么? Elasticsearch(简称 ES) 是一个基于 Apache Lucene 的开源分布式搜索和分析引擎,用 Java 开发,设计用于云计算中,能够实现实时数据搜索、分析和存储。它具有高扩展性、高可用性和分布式特性,广泛应用于日志分析、全文搜索、实时数据统计等场景…...

pdf.js-2.3.0国内下载地址

https://npmmirror.com/package/pdfjs-dist?version=2.3.200...

opencv学习记录2

腐蚀操作 #设置核 kernel = np.ones((3,3),np.uint8) erosion = cv2.erode(img,kernel,iterations=1)膨胀 dige_dilate = cv2.dilate(src,kernel,iterations=1)开运算,闭运算,梯度运算 膨胀-腐蚀 开运算原理: 图像开运算是图像依次经过腐蚀、膨胀处理后的过程。图像被腐蚀后…...

get请求图片文件转为base64编码

public static String convertImageToBase64(String url) throws IOException {String urls = url.replaceAll("192.168.10.242", "192.192.192.192");// 创建HTTP客户端try (CloseableHttpClient httpClient = HttpClients.createDefault();// 发送GET请求…...

BMS与威纶通人机界面通信问题

BMS和威纶通人机界面通信 接口:485 协议:modbus-rtu 波特率:115200bps 问题:电脑模拟人机界面和BMS连接时,显示正常,使用人机界面实物和BMS连接时,无反应;排除BMS的modbus协议本身问题 排查思路: 1)确认人机界面有没有下发读取指令; 用485工具连接电脑和人机界面,用…...