Milvus 概述         

        向量是神经网络模型的输出数据格式,可以有效地对信息进行编码,在知识库、语义搜索、检索增强生成(RAG)等人工智能应用中发挥着举足轻重的作用。

        Milvus 是一个开源的向量数据库,适合各种规模的人工智能应用。

        Milvus 是一种高性能、高扩展性的向量数据库,可在从笔记本电脑到大规模分布式系统等各种环境中高效运行。它既可以开源软件的形式提供,也可以云服务的形式提供。

        Milvus 是一个开源项目,以 Apache 2.0 许可发布。大多数贡献者都是高性能计算(HPC)领域的专家,擅长构建大型系统和优化硬件感知代码。核心贡献者包括来自 Zilliz、ARM、NVIDIA、AMD、英特尔、Meta、IBM、Salesforce、阿里巴巴和微软的专业人士。

Embeddings 和 Milvus

        文本、图像和音频等非结构化数据格式各异,并带有丰富的底层语义,因此分析起来极具挑战性。为了处理这种复杂性,Embeddings 被用来将非结构化数据转换成能够捕捉其基本特征的数字向量。然后将这些向量存储在向量数据库中,从而实现快速、可扩展的搜索和分析。

        Milvus 提供强大的数据建模功能,使您能够将非结构化或多模式数据组织成结构化的 Collections。它支持多种数据类型,适用于不同的属性模型,包括常见的数字和字符类型、各种向量类型、数组、集合和 JSON,为您节省了维护多个数据库系统的精力。

Milvus 为何如此快速?

        Milvus 从设计之初就是一个高效的向量数据库系统。在大多数情况下,Milvus 的性能是其他向量数据库的 2-5 倍。这种高性能是几个关键设计决策的结果:

        硬件感知优化 :为了让 Milvus 适应各种硬件环境,        专门针对多种硬件架构和平台优化了其性能,包括 AVX512、SIMD、GPU 和 NVMe SSD。

        高级搜索算法 :Milvus 支持多种内存和磁盘索引/搜索算法,包括 IVF、HNSW、DiskANN 等,所有这些算法都经过了深度优化。与 FAISS 和 HNSWLib 等流行实现相比,Milvus 的性能提高了 30%-70%。

        C++ 搜索引擎向量数据库性能的 80% 以上取决于其搜索引擎。由于 C++ 语言的高性能、底层优化和高效资源管理,Milvus 将 C++ 用于这一关键组件。最重要的是,Milvus 集成了大量硬件感知代码优化,从汇编级向量到多线程并行化和调度,以充分利用硬件能力。

        面向列 :Milvus 是面向列的向量数据库系统。其主要优势来自数据访问模式。在执行查询时,面向列的数据库只读取查询中涉及的特定字段,而不是整行,这大大减少了访问的数据量。此外,对基于列的数据的操作可以很容易地进行向量化,从而可以一次性在整个列中应用操作,进一步提高性能。

概念关系图(逻辑结构)

Milvus数据库
├── Collection集合
│   ├── Partition分区
│   │   └── Entity实体
│   │       └── Fields字段(向量 + 元数据)
│   ├── Schema结构
│   └── Index索引
├── 查询操作(Search / Query)
└── 数据一致性机制

示例

1.环境准备

pip install pymilvus

2.连接

from pymilvus import MilvusClient
client = MilvusClient(uri='http://127.0.0.1:19530')

3.创建collection

    fields = [FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),FieldSchema(name="name", dtype=DataType.VARCHAR, max_length=64),FieldSchema(name="category", dtype=DataType.VARCHAR, max_length=64),#这里使用结巴分词 FieldSchema(name="description", dtype=DataType.VARCHAR, max_length=1000, enable_analyzer=True,analyzer_params={"tokenizer": "jieba", "filter": ["cnalphanumonly"]}),# 向量维度 我这里使用openai的embedding生成的向量默认维度是1536# embedding_llm1.embed_documents(titles)FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=1536),# 稀疏向量字段FieldSchema(name="sparse_vector", dtype=DataType.SPARSE_FLOAT_VECTOR)
#添加的 BM25 函数,使得 Milvus 能够:自动从 title 字段提取稀疏特征;
bm25_function = Function(name="bm25",input_field_names=["title"],output_field_names=["sparse_vector"],function_type=FunctionType.BM25,
)
schema = CollectionSchema(fields=fields,functions=[bm25_function], description="商品向量集合")
client.create_collection(collection_name=COLLECTION_NAME,schema=schema,consistency_level="Strong", # 一致性级别enable_dynamic_field=True,# 动态字段 如果设为 True,Milvus 将自动接受未在 schema 中定义的新字段数据,并将其存储为 JSON 格式。auto_id=True # 自动生成ID。)

        定义 schema 时启用 BM25 函数,指定输入字段为 title,输出字段为 sparse_vector(稀疏向量),插入数据时只需提供原始文本,系统会自动调用 BM25 函数生成稀疏向量

        BM25 是一种经典的信息检索评分函数(ranking function),用于衡量查询语句与文档的相关性。它基于词频(TF)、逆文档频率(IDF)和文档长度等因素对结果进行打分。

        consistency_level是 Milvus 中用于控制 数据读写一致性 的参数,它决定了在进行查询或检索操作时,系统保证返回的数据与最新写入数据之间的一致性程度
        "Strong"强一致性:每次读取都返回最新的数据,适用于对实时性要求高的场景。
        "Session"会话一致性:在一个客户端连接内保证一致性,适合多次查询的连续操作。
        "Bound"有界一致性:允许一定时间延迟,性能较好,适合容忍短暂延迟的场景。
        "Eventually"最终一致性:不保证立即看到写入结果,性能最优,但可能读到旧数据

4.插入数据

测试数据:

电子产品类
运动型蓝牙耳机
这款运动蓝牙耳机专为运动爱好者打造。它采用蓝牙5.2技术,连接稳定,即使在运动的过程中大幅度晃动也不会轻易断连。拥有防水防汗的特性,其外壳经过特殊工艺处理,能有效抵御汗水和雨水的侵蚀,非常适合跑步、健身、骑行等运动场景。音质上,它采用了独特的音腔设计,增强了低频效果,让节奏感强烈的运动音乐更加带感。耳机采用挂耳式的人体工学设计,贴合耳部轮廓,硅胶材质的耳挂柔软有弹性,长时间运动佩戴也不会觉得耳朵酸痛,并且稳固性极佳,运动时不会掉落。在续航方面表现不错,一次充满电可以连续使用7小时,满足一场酣畅淋漓的运动所需。
电子产品类
降噪蓝牙耳机
这款降噪蓝牙耳机主打主动降噪功能。采用先进的蓝牙5.3技术,连接稳定又迅速。它配备了专业的降噪芯片,能够精准识别并过滤外界环境噪音,比如飞机的轰鸣声、地铁的嘈杂声、办公室的键盘敲击声等,最高可降低35dB的噪音,让你沉浸在纯净的音乐世界中。音质方面,它采用了高品质的动圈单元,能够呈现出丰富细腻的音乐细节,高音清亮,中音饱满,低音深沉有力。耳机的耳罩采用了柔软的蛋白皮材质,内部填充了高密度海绵,贴合耳部,佩戴起来非常舒适,长时间使用也不会有压迫感。续航能力也相当出色,开启降噪功能后可连续使用6小时,关闭降噪功能则能使用长达9小时。
电子产品类
骨传导蓝牙耳机
这款骨传导蓝牙耳机采用了创新的骨传导技术,无需堵塞耳道就能传递声音。它采用蓝牙5.0技术,连接稳定,并且具备良好的兼容性,能与各种智能设备轻松配对。由于不堵塞耳道,在听音乐的同时还能感知周围环境的声音,保障了使用时的安全性,适合户外运动、骑行、跑步等场景。音质上,它虽然不能像传统耳机那样呈现极致的音质效果,但也能满足日常基本的听音乐和通话需求。耳机的机身采用了硅胶材质,柔软有弹性,可随意弯曲,佩戴起来十分轻便,仅重28克,并且贴合耳部,运动时不易掉落。续航方面,一次充满电可连续使用5小时,小巧轻便的充电仓还能为耳机额外充电2 - 3次。
电子产品类
儿童蓝牙耳机
这款儿童蓝牙耳机专为儿童设计。采用蓝牙5.0技术,连接稳定,操作简单,方便儿童使用。它特别注重儿童的听力保护,内置了音量限制功能,最大音量不会超过85dB,有效避免音量过大对儿童听力造成损伤。音质方面,采用了适合儿童听觉特点的音频调校,声音清晰、柔和,让孩子们能听到纯真的音乐。耳机的头带采用了柔软的硅胶材质,可调节长度,能适应不同年龄段儿童的头围大小,佩戴舒适且不会给孩子的头部造成压迫感。外观设计十分可爱,有多种卡通造型和鲜艳的颜色可供选择,深受孩子们的喜爱。续航能力也不错,一次充满电可连续使用4小时,满足孩子日常听故事、听儿歌的需求。
电子产品类
商务蓝牙耳机
这款商务蓝牙耳机是商务人士的理想选择。它采用蓝牙5.3技术,连接稳定且低延迟,确保在商务通话中不会出现声音卡顿或延迟的情况。配备了高清麦克风和智能降噪算法,能够有效过滤周围环境噪音,在嘈杂的办公室、咖啡馆等场所也能保证清晰的通话质量。音质方面,声音清晰、准确,能让对方清楚地听到你的表达。耳机的设计简约时尚,采用了入耳式设计,小巧轻便,便于携带。耳帽采用了亲肤的硅胶材质,佩戴舒适,长时间通话也不会感到不适。续航能力较强,一次充满电可连续使用7小时,充电仓还能为耳机补充电量,满足一天的商务使用需求。
电子产品类
智能无线蓝牙耳机
这款蓝牙耳机采用先进的蓝牙5.3技术,连接稳定且快速。拥有高清音质,能够呈现丰富的音乐细节。人体工学设计,佩戴舒适,长时间使用也不会有不适感。续航能力出色,一次充满电可连续使用8小时以上。
电子产品类
便携式移动硬盘
大容量便携式移动硬盘,拥有2TB的存储空间,可轻松存储大量的照片、视频、文件等。外观小巧精致,便于携带。采用USB3.2高速接口,数据传输速度快,能让你快速备份和读取数据。
电子产品类
高清智能摄像头
具备4K超高清分辨率的智能摄像头,画面清晰细腻。支持日夜切换功能,即使在夜间也能清晰捕捉画面。内置智能感应系统,当检测到异常活动时会及时推送警报信息到你的手机。
家居用品类
多功能养生壶
这款养生壶集煮茶、煲汤、炖燕窝、煮蛋等多种功能于一体。采用优质的玻璃材质,耐高温且安全无毒。具备精准的温控系统,能根据不同的食材和需求调节合适的温度和时间。
家居用品类
智能扫地机器人
智能扫地机器人拥有先进的激光导航技术,能够快速准确地绘制家居地图,规划清扫路线。具备多种清扫模式,如自动清扫、定点清扫、沿边清扫等。还能通过手机APP远程控制,让你随时随地轻松清洁家居。
家居用品类
记忆棉床垫
记忆棉床垫采用高品质的记忆棉材质,能够根据人体的曲线和压力自动调整形状,提供精准的支撑,有效缓解身体压力。透气性好,能保持睡眠环境的干爽舒适。同时,它还具有静音效果,让你享受安静的睡眠。
服装配饰类
纯棉休闲T恤
采用100%纯棉面料,柔软舒适,透气性极佳。简约的设计风格,经典的圆领款式,适合各种场合穿着。多种颜色可选,满足你的不同搭配需求。
服装配饰类
真皮男士钱包
这款男士钱包采用优质的头层牛皮制作,质感柔软且耐用。内部设计合理,有多个卡槽、钞位和零钱袋,方便分类存放物品。精致的缝线工艺和简约的外观设计,彰显男士的沉稳与大气。
服装配饰类
时尚女士手链
时尚女士手链由高品质的水晶和合金制成,外观闪耀夺目。独特的设计款式,融合了时尚与优雅的元素,能为你的手腕增添一份迷人的魅力。是送给女性朋友的绝佳礼物。
服装配饰类
防风保暖围巾
围巾采用优质的羊毛材质,保暖性能极佳。表面经过特殊处理,具有防风功能,能有效抵御寒冷的天气。宽大的尺寸,可随意搭配不同的服装风格,让你在寒冷的季节也能保持时尚。
美妆护肤类
美白保湿面膜
这款面膜富含多种美白和保湿成分,如熊果苷、透明质酸等。能够深入肌肤底层,抑制黑色素的生成,同时为肌肤补充大量水分,让你的肌肤变得白皙、水润、有光泽。面膜纸采用轻薄透气的材质,贴合肌肤,使用起来非常舒适。
美妆护肤类
控油祛痘洗面奶
专为油性痘痘肌设计的洗面奶,具有强大的控油和祛痘功效。含有水杨酸、茶树精油等成分,能够深层清洁毛孔,去除多余的油脂和污垢,预防痘痘的产生。洗后肌肤清爽不紧绷,保持水油平衡。
美妆护肤类
持久定妆粉饼
定妆粉饼具有细腻的粉质,能够轻松贴合肌肤,打造出光滑、哑光的妆效。持久的定妆效果,能让妆容一整天都保持完美状态,不易脱妆、花妆。添加了护肤成分,在定妆的同时还能滋养肌肤。
母婴用品类
婴儿纯棉连体衣
婴儿连体衣采用天然纯棉面料,柔软亲肤,对宝宝的皮肤无刺激。宽松的版型设计,让宝宝活动自如。精致的包边工艺,防止刮伤宝宝娇嫩的肌肤。多种可爱的图案和颜色可供选择。
母婴用品类
儿童安全座椅
儿童安全座椅符合严格的安全标准,采用高强度的材料制作,能够有效保护儿童在乘车过程中的安全。人体工学设计,让宝宝乘坐舒适。可调节的座椅角度和头枕高度,适合不同年龄段的儿童使用。
母婴用品类
婴儿润肤霜
专为婴儿娇嫩肌肤设计的润肤霜,含有天然的植物精华,如橄榄油、芦荟等。能够滋润宝宝的肌肤,防止肌肤干燥、皲裂。温和无刺激,经过严格的安全性检测,让妈妈们放心使用。
食品饮料类
纯牛奶
这款纯牛奶源自优质牧场,采用新鲜的生牛乳制作而成。富含丰富的蛋白质、钙等营养成分,口感醇厚,奶香浓郁。经过严格的质量检测,安全有保障,是全家补充营养的理想选择。
食品饮料类
坚果礼盒
坚果礼盒内包含多种美味的坚果,如核桃、杏仁、腰果、巴旦木等。这些坚果均经过精心挑选,颗粒饱满,口感香脆。富含不饱和脂肪酸、维生素和矿物质等营养成分,健康又美味。
食品饮料类
水果茶包
水果茶包由多种新鲜水果和花草混合而成,如草莓、柠檬、玫瑰、薄荷等。口感清新酸甜,具有丰富的果香和花香。富含维生素C等营养成分,有美容养颜、提神醒脑的功效。可直接用开水冲泡,方便快捷。
食品饮料类
手工巧克力
手工制作的巧克力,选用高品质的可可豆,经过精细的加工工艺制作而成。口感丝滑醇厚,有多种口味可供选择,如牛奶巧克力、黑巧克力、榛果巧克力等。精美的包装,是送给亲朋好友的甜蜜礼物。

代码:

goods = []with open("../datas/goods.txt", "r", encoding="utf-8") as f:while True:category = f.readline().strip()if category == "":breakname = f.readline().strip()description = f.readline().strip()goods.append({"category": category, "name": name, "description": description})vectors = embedding_llm2.embed_documents([item["description"] for item in goods])# 修改插入数据格式,使其符合schema定义data_to_insert = []for i in range(len(goods)):data_to_insert.append({"category": goods[i]["category"],"name": goods[i]["name"],"description": goods[i]["description"],"vector": vectors[i]})# 插入数据res = client.insert(collection_name=COLLECTION_NAME, data=data_to_insert)print(res)

5.创建索引

# 创建索引参数对象index_params = client.prepare_index_params()# 添加一个索引,指定字段名称、索引类型、度量类型和参数index_params.add_index(field_name="vector",index_type="HNSW",metric_type="IP",params={"M": 16, "efConstruction": 64})# 为 sparse_vector 字段添加 SPARSE_INVERTED_INDEX 索引index_params.add_index(field_name="sparse_vector",index_type="SPARSE_INVERTED_INDEX",metric_type="BM25",params={"inverted_index_algo": "DAAT_MAXSCORE","bm25_k1": 1.2,"bm25_b": 0.75})# 创建索引client.create_index(COLLECTION_NAME, index_params)

index_type 和 metric_type

        在 Milvus 中,index_type 和 metric_type 是创建索引时非常关键的两个参数,它们分别用于指定索引类型和距离度量方式。以下是详细的选项说明:

index_type 索引类型(常用)

📌 推荐组合:对于稠密向量,推荐使用 HNSW + IP;对于稀疏向量,推荐 SPARSE_INVERTED_INDEX。 

metric_type 距离度量类型

注意:某些索引类型只支持特定的 metric_type,例如 HNSW 支持 IP、L2,而 SPARSE_INVERTED_INDEX 只支持 BM25(需配合稀疏向量使用)。

推荐配置建议(基于场景)

M 和 efConstruction         

        在 Milvus 中使用 HNSW(Hierarchical Navigable Small World)索引时,参数 M 和 efConstruction 是两个关键的构建参数,它们直接影响索引的质量

        M: 图结构中每个节点连接的邻居数。默认值:16 建议值:5 ~ 48, M 值越大,图结构越密集,检索精度越高,相应的占用内存也越大 构建时间越长

        M=16:适用于大多数场景,构建速度快、内存占用低。
        M=32~48:适合对精度要求高、资源充足的场景。
        efConstruction: 构建索引时搜索候选节点的数量。默认值:64 建议值10 ~ 512,efConstruction越大,索引图质量越高,查询效果越好。相应的构建时间越长,efConstruction对内存影响较小

        efConstruction=64:快速构建,适合测试或小数据集。
        efConstruction=128~256:高质量索引,适合生产环境。

稠密向量和稀疏向量

稠密向量

        稠密向量是一个几乎每个维度都有非零值的固定长度向量,通常用于表示语义信息。

        数据类型(Milvus 中)FLOAT_VECTOR用于存储稠密向量。必须指定维度(dim),例如 dim=1536。

特征:

适用模型与场景:

索引推荐:HNSW、IVF_FLAT、IVF_PQ、RHNSW_FLAT

稀疏向量

        稀疏向量是一种大多数维度为零,只有少数位置有非零值的向量,通常用于关键词或特征计数。

        数据类型(Milvus 中)SPARSE_FLOAT_VECTOR用于存储稀疏向量,使用字典格式 {dimension_index: value} 表示

适用模型与场景

如何选择

6.搜索类型

Milvus 支持各种类型的搜索功能,以满足不同用例的需求:

  • ANN 搜索:查找最接近查询向量的前 K 个向量。

  • 过滤搜索:在指定的过滤条件下执行 ANN 搜索。

  • 范围搜索:查找查询向量指定半径范围内的向量。

  • 混合搜索:基于多个向量场进行 ANN 搜索。

  • 全文搜索:基于 BM25 的全文搜索。

  • Rerankers:根据附加标准或辅助算法调整搜索结果顺序,完善初始 ANN 搜索结果。

  • 获取:根据主键检索数据。

  • 查询使用特定表达式检索数据。

向量搜索案例:

    #将集合加载到内存中,以便进行查询操作。client.load_collection(COLLECTION_NAME)search = client.search(collection_name=COLLECTION_NAME,data=[embedding_llm2.embed_query("蓝牙耳机")],  #embedding进行向量化anns_field="vector",  # 指定要检索的向量字段filter="category == '电子产品类'", #过滤条件output_fields=["name", "category", "description"], #输出字段limit=3 #返回top3)

bm25全文检索:

    #将集合加载到内存中,以便进行查询操作。client.load_collection(COLLECTION_NAME)keyword_query = "蓝牙耳机"#'drop_ratio_search': 这是 Milvus 中的一个参数,用于设置在全文检索(基于稀疏向量)过程中可以忽略的低权重特征比例。这里设置为 0.8 表示在搜索过程中会忽略掉 80% 的低权重特征,以提升搜索效率。search_params = {'params': {'drop_ratio_search': 0.8},}search = client.search(collection_name=COLLECTION_NAME,data=[keyword_query], # 搜索文本数据anns_field='sparse_vector', # 确保指定查询的稀疏向量字段output_fields=['description'],  # 输出字段limit=3,search_params=search_params)print(search)

什么是混合检索?

        混合检索(Hybrid Search)是一种结合全文检索(如 BM25)和向量相似度检索(如 ANN,近似最近邻搜索)的技术,通过融合两者的结果提升检索的准确性和覆盖率。
        BM25(全文匹配):适用于关键词匹配,捕捉显式语义。
        ANN(向量匹配):适用于语义理解,捕捉隐式相关性。
        混合检索在实际应用中可以显著提高召回率和排序质量,尤其适合处理复杂查询或模糊语义场景。
混合检索的核心流程
数据建模:
        存储原始文本字段(用于 BM25)
        存储该文本的 embedding 向量(用于 ANN)
索引构建:
        对文本字段建立稀疏索引(SPARSE_INVERTED_INDEX + BM25)
        对向量字段建立稠密索引(如 HNSW, IVF_FLAT)
检索阶段:
        分别执行 BM25 和 ANN 查询
        使用加权评分或排序融合算法(如 Reciprocal Rank Fusion, RRF)合并结果

混合搜索案例

    #向量搜索vector_search_params = {"data": [embedding_llm2.embed_query("蓝牙耳机")],"anns_field": "vector",#nprobe: 表示在执行 HNSW 索引搜索时,从索引中探测(访问)的最近邻子空间(neighborhood cells)的数量"param": {"nprobe": 10},"limit": 3}vector_search_result = AnnSearchRequest(**vector_search_params)# 全文搜索full_text_params = {"data": ["蓝牙耳机"],"anns_field": "sparse_vector",#drop_ratio_search: 表示在执行基于 SPARSE_FLOAT_VECTOR 字段的全文搜索时,忽略掉低权重的稀疏特征项的比例。设置为0.2#意味着在搜索过程中会忽略掉权重最低的20 % 的特征项,从而加快查询速度,但可能会略微降低结果的相关性。"param": {"drop_ratio_search": 0.2},"limit": 3}full_text_result = AnnSearchRequest(**full_text_params)# 初始化 配置 Rerankers 策略ranker = RRFRanker(100)reqs = [vector_search_result, full_text_result]#混合搜索res = client.hybrid_search(collection_name=COLLECTION_NAME,reqs=reqs,ranker=ranker,limit=3,output_fields=["name", "category", "description"]  # 同样指定输出字段)print("向量搜索请求对象:", vector_search_result)print("全文搜索请求对象:", full_text_result)print("混合搜索结果", res)

        AnnSearchRequest 是 pymilvus 提供的一个类,用于构建近似最近邻搜索(Approximate Nearest Neighbor Search)的请求对象。它主要用于 Milvus 的混合搜索(hybrid search)场景中,将多个搜索请求组合在一起。

配置 Rerankers 策略

要对 ANN 搜索结果集进行合并和重新排序,选择适当的重新排序策略至关重要。Milvus 提供两种重排策略:

  • 加权排名:如果结果需要强调某个向量场,请使用该策略。WeightedRanker 可以为某些向量场赋予更大的权重,使其更加突出。

  • RRFRanker(互易排名融合排名器):在不需要特别强调的情况下选择此策略。RRFRanker 能有效平衡每个向量场的重要性。

7.删除文档

res = client.delete(collection_name=COLLECTION_NAME, ids=[0, 2])res = client.delete(collection_name=COLLECTION_NAME,filter="category == '电子产品类'",
)

8.删除集合

client.drop_collection(collection_name=COLLECTION_NAME)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/87891.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/87891.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/87891.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp的光标跟随和打字机效果

1、准备好容器文字的显示textRef&#xff0c;以及光标的显示 &#xff0c;使用transform-translate对光标进行移动到文字后面<template><view class"container" ref"contentRef"><u-parse :content"nodeText" ref"textRef&q…

「ECG信号处理——(21)基于Pan-Tompkins和随机森林(RF)的睡眠呼吸暂停检测算法」2025年7月4日

目录 1、引言 2、数据库介绍&#xff08;Apnea-ECG Database) 3、基于Pan-Tompkins和随机森林&#xff08;RF&#xff09;的睡眠呼吸暂停检测算法 3.1 算法概述 3.2 心电信号预处理及QRS波检测算法 3.3 心电信号的随机森林睡眠呼吸暂停识别 4、实验结果 4.1 心电信号预处理及QR…

C++学习之STL学习:list的模拟实现

在上一篇学习了list的使用后&#xff0c;在本篇我们将通过模拟实现的方式深入了解list的底层运作原理。 作者的个人gitee&#xff1a;楼田莉子 (riko-lou-tian) - Gitee.com 感兴趣的读者可以看一看 目录 前置准备 结点的定义 链表类的定义 迭代器 普通迭代器 const迭代器 …

不引入变量 异或交换的缺点

文章目录选择排序正确代码交换两个数位置的方法引入中间变量不引入中间变量&#xff0c;使用异或的方法错误原因优化代码选择排序正确代码 // 数组中交换i和j位置的数public static void swap(int[] arr, int i, int j) {int tmp arr[i];arr[i] arr[j];arr[j] tmp;}// 选择排…

VS Code中使用Git的方法:环境配置与Git操作

本文介绍在Windows电脑的VS Code中&#xff0c;配置Git环境并使用Git命令、功能的方法。 1 环境部署 首先&#xff0c;我们需要分别安装Git环境与VS Code软件。这里需要注意&#xff0c;即使是在VS Code中使用Git&#xff0c;也需要我们首先在电脑上单独配置好Git的环境&#…

在 Windows 上安装和运行 Apache Kafka

Apache Kafka是一款开源应用程序&#xff0c;用于实时处理海量数据流。Apache Kafka 是一个发布-订阅消息系统。消息系统允许您在进程、应用程序和服务器之间发送消息。广义上讲&#xff0c;Apache Kafka 是一款可以定义主题并进行进一步处理的软件。 下载和安装 Apache Kafk…

【嵌入式电机控制#8】编码器测速实战

一、编码器测速重要参数有刷电机编码器参数&#xff08;其他的后面会慢慢提及&#xff0c;也可以在某宝看&#xff09;1. 编码器分辨率&#xff08;PPR&#xff09;2. 编码器工作电压 3. 电机减速比 例如 30&#xff1a;1 指的就是电机减速轴转1圈&#xff0c;编码器转30圈。注…

在C#中,可以不实例化一个类而直接调用其静态字段

这是因为静态成员&#xff08;static members&#xff09;属于类本身&#xff0c;而不是类的实例。这是静态成员的核心特性1. 静态成员属于类&#xff0c;而非实例当用static关键字修饰字段、方法或属性时&#xff0c;这些成员会绑定到类级别&#xff0c;而不是实例级别。它们在…

Win11 安装 Visual Studio(保姆教程 - 更新至2025.07)

Visual Studio 安装&#xff08;保姆教程 - 更新至2025.07&#xff09; 前言安装须知安装过程1. 下载安装包2. 安装3. 注册4. 创建桌面快捷方式 前言 本教程针对 非计算机相关专业的小白用户 &#xff0c;手把手教你如何基于 win11 操作系统 安装 Visual Studio 2022。安装搭载…

工商银行杭州软开校招面经分享

近年来,央国企成为了很多求职者的首选,无论是校招还是社招。不过,在选择央国企的时候,还是尽量要选择垄断性或者盈利多的。 昨天看到一份 2024 年中国企业 500 强榜单中提到的最赚钱的十家央国企的名单,给大家分享一下。 排名企业名称成立时间主要业务描述2024年营收(万…

李宏毅genai笔记:推理

0 思考越多效果越好 可以把算力投入在training的时候&#xff0c;也可以投入在testing上面 连起来的线表示表现是差不多的&#xff0c;越高分&#xff08;越右上方&#xff09;越好 同样-1000分&#xff0c;可以训练时候用力较少&#xff0c;test的时候多用点算力 但是training…

使用SSH隧道连接远程主机

概述 SSH(Secure Shell 的缩写)是一种网络协议,通过使用身份验证机制,是两台计算机进行加密通信。 SSH 主要用途是登录服务器,还可以作为加密通信的中介,充当两台服务器之间的通信加密跳板,这个功能称为端口转发(port forwarding),又称 SSH 隧道(tunnel)。 端口…

数据结构---链表理解(二)

文章目录 二、链表2.1 链表初始化2.2 单链表2.2.1 单链表---头插法2.2.2 单链表---单链表遍历2.2.3 单链表---尾插法2.2.4 单链表---在指定位置插入数据2.2.5 单链表---删除指定位置节点2.2.6 单链表---获取链表长度2.2.7 单链表---释放链表 二、链表 暂时到这一步你就理解为&a…

Playnite使用指北 —— 一个优秀的本地化游戏管理工具

为何我们使用 Playnite&#xff1f; 首先我们需要知道 Playnite 是什么&#xff0c;如果你有过用 emby 等管理过电影影视的经验&#xff0c;你可能会对这种工具感到熟悉&#xff1a; Playnite 是一个开源的本地化的游戏管理软件&#xff0c;可以实现多平台的管理&#xff08;S…

时间与空间复杂度详解:算法效率的度量衡

一、为什么需要复杂度分析&#xff1f; 想象你正在开发一个手机通讯录应用&#xff0c;需要实现联系人搜索功能。你有两种算法可以选择&#xff1a; // 算法A&#xff1a;线性搜索 public Contact linearSearch(List<Contact> contacts, String name) {for (Contact c …

408第三季part2 - 计算机网络 - 交换机

理解 题目 如果你这么做 那你完了&#xff0c;因为这种叫存储转发 直通只转目的地址 b 再次理解 A发数据到交换机里想给B 然后交换表会记录A的MAC地址和端口 然后因为交换表找不到B&#xff0c;所以A会把BCD全部肘一遍&#xff08;广播&#xff09;&#xff0c;最终只有B会…

从零开始开发纯血鸿蒙应用之探析仓颉语言与ArkTS的差异

探析仓颉语言与ArkTS的差异 〇、前言一、IDE 的支持程度不同二、内置组件的使用方式不同三、页面路由实现方式的不同四、总结 〇、前言 截止到本文发布的日期为止&#xff0c;鸿蒙官方所推荐的开发原生鸿蒙应用的语言&#xff0c;有两种&#xff0c;分别是扩展自 Typescript 的…

Cursor/VScode ,点击运行按钮,就打开新的终端,如何设置为在当前终端运行文件而不是重新打开终端----一招搞定篇

我发现就是&#xff0c;我运行.py&#xff0c;点击完运行按钮&#xff0c;就给我重新打开一个终端&#xff0c;然后新的终端是在base环境中的&#xff0c;就跟麻烦 还得在当前终端输入python3 test.py 来运行文件。能不能修改。1、打开cursor或者vscode 。 同时按下 ctrlshiftp…

【STM32实践篇】:I2C驱动编写

文章目录I2C 物理层I2C 协议层1. 数据有效性2. 起始和停止信号3. 应答响应4. 总线的寻址方式5. 数据传输5.1 主机向从机发送数据5.2 主机由从机中读数据5.3 I2C通信复合格式I2C 驱动编写1. 配置 SCL 和 SDA2. I2C起始信号和停止信号3. 等待从设备应答4. 主机发送ACK和NACK信号5…

ragflow本地部署教程linux Ubuntu系统

以下是一份在 Ubuntu 系统上本地部署 RAGFlow 的详细教程。 一、基础环境准备 1.硬件要求 –CPU ≥ 4核 –RAM ≥ 16 GB –磁盘空间 ≥ 50 GB&#xff08;建议 SSD&#xff09; 2.系统配置 更新系统 sudo apt update && sudo apt upgrade -y 设置内核参数&#xff…