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

WGDI-分析WGD及祖先核型演化的集成工具-文献精读126

WGDI: A user-friendly toolkit for evolutionary analyses of whole-genome duplications and ancestral karyotypes

WGDI:一款面向全基因组重复事件与祖先核型演化分析的易用工具集

摘要

在地球上大多数主要生物类群中,人们已检测到全基因组复制(WGD)及其后续的核型变化。为了在基因组分析中更清晰地揭示这些复杂的多层次共线性模式,迫切需要便捷而精确的分析工具。为满足这一需求,我们开发了WGDI(Whole-Genome Duplication Integrated analysis,全基因组复制综合分析工具),这是一个基于Python的命令行工具,可用于全面分析多次多倍化事件及跨物种的基因组比对。

WGDI支持三种主要分析流程:多倍体推断、基因组同源性的层级推断以及祖先染色体核型分析。它能够基于高质量染色体水平的基因组数据,更有效地检测WGD事件,并深入解析与WGD相关的演化过程。值得一提的是,WGDI能提取完整的共线性区块,并助力详细核型进化的重建。

该工具包已在GitHub上免费开放获取(GitHub - SunPengChuan/wgdi: WGDI: A user-friendly toolkit for evolutionary analyses of whole-genome duplications and ancestral karyotypes)。作为应用示例,WGDI成功揭示了Aquilegia coerulea(蓝耧斗菜)与Vitis vinifera(葡萄)在经历WGD之后的核型进化过程,并否定了蓝耧斗菜是核心双子叶植物异源多倍化起源的亲本之一这一假说。

引言

已有确凿证据表明,全基因组复制(WGD)或多倍化,以及伴随而来的核型变化,在多种真核生物谱系中反复发生(Van de Peer 等,2017)。WGD 被认为是一种重要的进化过程,尤其在植物中尤为显著(Soltis 和 Soltis,2016;Landis 等,2018)。因此,识别WGD事件、确定其发生的时间与在进化史中的位置,以及重建祖先核型,对于深入理解真核生物如何多样化及适应不同环境至关重要(Fawcett 等,2009;Mabry 等,2020)。

目前,用于检测WGD的主要方法分为三类:基于同义替代速率(Ks-based)、基因树(gene tree-based)和共线性(synteny-based)的方法(Rabier 等,2014;Mabry 等,2020)。不同方法在不同数据集中的表现各有优劣(Kellis 等,2004;Hahn,2007;Vanneste 等,2013;Ruprecht 等,2017;Tiley 等,2018;Nakatani 和 McLysaght,2019;Zwaenepoel 等,2019;Zwaenepoel 和 Van de Peer,2019)。

随着越来越多高质量染色体水平基因组的组装发布,研究人员已开发出多种方法用于识别保留在染色体上的同源基因所形成的保守共线性区块。早期的方法如 ADHoRe(Vandepoele 等,2002)和 DiagHunter(Cannon 等,2003),通常依赖于相邻匹配基因对的聚类。相比之下,更新的方法使用动态规划算法来构建成对共线基因链,如 ColinearScan(Wang 等,2006)、Cyntenator(Rödelsperger 和 Dieterich,2010)、MCscan、MCScanX 和 JCVI(Tang 等,2017)。然而,鉴于频繁发生的递归WGD以及随后的基因组重组(通常伴随染色体重排和大量基因丢失)使现存基因组高度复杂,这些方法在进行所有详细后续分析方面的能力仍存在差异、不完善且耗时,具体包括生成共线基因或区块的同源性散点图或环图、Ks值计算、Ks峰拟合、祖先核型演化探索以及共线基因比较等任务(Ruprecht 等,2017;Van de Peer 等,2017;Wang 等,2018)。

为促进基于高质量染色体水平基因组的WGD分析,我们开发了一个基于Python的命令行工具包——WGDI(Whole-Genome Duplication Integrated analysis,全基因组复制综合分析)。WGDI整合了当前多数WGD相关的生物信息学分析功能,包括基因组内外的散点图比对、共线性检测、Ks估算与峰拟合、祖先核型演化研究及共线树推断。WGDI 在重建祖先核型、提取现存物种相应前体染色体方面表现出色,能够加速WGD相关核型研究的进展。

结果
WGDI软件包的结构

WGDI的完整源代码可在GitHub(GitHub - SunPengChuan/wgdi: WGDI: A user-friendly toolkit for evolutionary analyses of whole-genome duplications and ancestral karyotypes)上免费获取,并可在Windows、Linux或macOS操作系统中部署。WGDI使用Python3编写,可通过pip或conda进行安装。它包含多个子程序,用户只需修改配置文件并输入子程序名称(例如:“wgdi -d your.conf”)即可执行相应功能。WGDI的子程序参数和功能如图1A所示。WGDI支持三大主要工作流程(见图1B): (1) 利用同源点图、共线性和Ks分布以及同源基因树进行多倍化分析与推断; (2) 针对递归古多倍化事件进行基因组同源关系的分层推断; (3) 进行亚基因组和祖先染色体核型分析及进化情景推断。 WGDI的输出可以包括矢量图(如SVG格式),适合直接用于发表(见图1C)。详细的功能说明和参数设置可参考:Usage — WGDI 0.71 documentation。

图1. WGDI软件包结构,展示主要组成部分及其依赖关系

(A) WGDI的多种用法以及各子程序之间的关联关系。 (B) WGDI的三大主要工作流程及其对应的子程序。 (C) WGDI可视化输出示例图。更多输出示例可直接访问:Welcome to WGDI’s Documentation! — WGDI 0.71 documentation。

更灵敏且更准确的共线性检测

为了评估算法性能,我们将WGDI提取的共线区与另外两款常用工具——MCScanX和JCVI(v1.2.7)提取的结果进行了对比。三款工具使用相同的数据集进行测试,即人类(Homo sapiens)与黑猩猩(Pan troglodytes)基因组。WGDI的参数设置为:repeat_number = 10,mg = 25,25,muplite = 1,grading = 50,40,25,score = 100;MCScanX和JCVI使用默认参数。 在H. sapiens第12号染色体与P. troglodytes第13号染色体之间,WGDI、MCScanX和JCVI提取的共线区数量均为三个,但在同源块上提取的同源基因对数量存在显著差异(见图2A)。WGDI提取的共线基因数量多于其他两款工具,尽管JCVI的表现优于MCScanX。 为了进一步探究这种差异的原因,我们以一个富集了重复基因的共线区为例,展示了三款软件的表现(见图2B)。同源基因对在该区域内以点的形式展示,使用同源点图的规则进行上色,共线基因对被放大并排列。WGDI、MCScanX和JCVI分别提取了49、28和40对同源基因。MCScanX忽略了这些重复基因富集区域,导致提取的同源基因对数量最少。 此外,MCScanX和JCVI提取的共线区中漏掉了一些点,甚至包括一些(用红色标记,黑色箭头指示)没有重复基因的基因对。由于在共线性分析前进行了筛选,MCScanX和JCVI未能提取这些同源基因对。最终,WGDI和JCVI(默认参数)分别保留了61,117对和18,644对同源基因对。WGDI在同源矩阵中保留了更多的同源基因对,这有助于识别更长且更多的共线区。

图2. WGDI、MCScanX与JCVI在共线性区段提取方面的性能比较

(A) 使用WGDI、MCScanX和JCVI在人类第12号染色体黑猩猩第13号染色体之间识别局部共线性区段。三种方法提取的共线性区段中同源基因对的数量存在显著差异。

(B) 在富含重复基因的区域提取局部共线性区段时,不同方法提取结果差异显著。图中以点状表示同源基因对,放大并对齐的为共线性基因对。WGDI根据同源性将同源基因对划分为红色、蓝色和灰色三类。图中黑色与灰色箭头所示位置代表被遗漏的红点,即应被识别为共线性基因对但未被识别。

更高灵敏度的共线性检测方法能够保留更多同源基因对,从而提升共线性区段识别的准确性。WGDI对每个基因的同源基因对进行排序与打分,并依据颜色分类的点设定不同的搜索范围,以此提高共线性区段的稳定性与精度(图3A)。对于一个给定的基因,仅当其同源基因对满足设定条件时,才被纳入共线性区段。具体来说,红、蓝、灰三类点的得分依次为50、40和25,得分越高,搜索范围越大。例如得分为50的红点将拥有最广的搜索范围,而得分为25的灰点仅保留有限范围内的基因对。对于重复基因数量超过设定参数“muplite+4”的基因,仅保留灰点类型的同源基因对。这种方式通过缩小两端灰点的搜索范围,降低了共线性区段边缘识别的错误率,同时提升了区段长度与保留的基因对数量。

此外,由于红点具有最高得分,共线性区段更倾向于优先保留红点,以增强其稳定性和准确性。例如,在某一共线性区段(图3B)中,有两个同源点分别被标记为A和B。如果未对这些同源基因对进行排序与打分,则动态规划算法将赋予它们相同的得分,从而无法区分其重要性。

图3. WGDI共线性检测算法改进流程图

(A) WGDI根据基因同源性将同源基因对划分为红色、蓝色和灰色三类点,并赋予不同分数。不同颜色的点对应不同的搜索范围,这种设置不仅降低了共线性区段的错误率,还可延长其长度。

(B) 点的不同得分也有助于增强共线性区段的稳定性。 相较之下,若未对同源基因进行排序,则无法有效识别更高同源性(如红点)的基因对。我们使用葡萄(Vitis vinifera)、红豆杉叶树(Cercidiphyllum japonicum)、四合木(Tetracentron sinense)和黑胡椒(Piper nigrum)的基因组,对WGDI与其他主流软件进行了共线性检测性能的比较(详见补充表1–4及补充图1–4),结果表明WGDI在多个系统中均表现出良好的效果。

WGDI的实际应用示例
多倍化推断分析

为展示WGDI在多倍体推断中的应用过程,以黄瓜(Cucumis sativus)这一已知经历多次多倍化事件的植物为例。已有研究推断其基因组经历过两轮多倍化:一次为被子植物核心类群共有的三倍体化事件(WGT,或称γ事件),另一次为较近时期的全基因组重复(WGD)(Huang 等, 2009;Wang 等, 2018)。作为参考,我们选用仅经历过γ事件的葡萄(V. vinifera)基因组(Jaillon 等, 2007)。

多倍化分析分三步进行: 首先,算法基于共线性(同源性点图)寻找WGD的证据。使用“-d”参数,WGDI可快速绘制V. vinifera与C. sativus之间的同源区段点图(图4A),以及C. sativus与V. vinifera之间的点图(图4B)。 纵向共线性深度为3,与所有核心双子叶植物经历γ事件的推断一致;横向共线性深度可能为2,主要由于红色点未集中在一个共线性区段上。在主要由红点组成的区段中,纵向共线性深度为2(图4B)。 结合V. vinifera基因组三组同源染色体的结构,这一结果提示最大共线性深度可能为3×2=6;在红点主导的区段中,其横向共线性深度为1,对应最大深度为3×1=3。 综合已有的多倍体事件推断和共线性深度信息,可以构建一幅系统进化树(图4F)。由此可见,WGDI生成的同源点图可适应大多数关于WGD事件的推断模型。

图 4. 以黄瓜(*Cucumis sativus*)和葡萄(*Vitis vinifera*)为例的多倍体推断

(A) 所选葡萄与黄瓜染色体之间同源关系的点阵图。葡萄的6、8和13号染色体是由核心真双子叶植物全基因组三倍化产生的同源三联体。 (B) 所选黄瓜与葡萄染色体之间的同源关系点阵图。图中用矩形标出了外旁系区域或次级匹配区域。 (C) Ks 点阵图,其中基于 Ks 值对共线性区块进行识别并着色。 (D) Ks 分布图。 (E) 两个物种的基因系统发育树。 (F) 使用 ASTRAL-III 构建的比对树推断系统发育关系。

第二步使用 Ks 分布来验证全基因组加倍(WGD)的发生及其时间。使用 “-bk” 程序,可以直观地可视化共线性基因对的 Ks 值(图 4C)。同一共线区块中的基因对 Ks 值波动较小,可以使用其中位数代表该区块的 Ks 分布。不同区块的 Ks 值差异很大,尤其是在区块来源于不同多倍化事件的情况下。通过结合参数和 Ks 分布,可以轻松区分这些区块,并使用 “-pf” 程序输出拟合函数及其最优拟合。目前,许多研究者仍使用高斯混合模型或类似方法拟合多个多倍化事件。但由于高斯混合模型容易过拟合,得到的 Ks 峰可能波动大、不准确(Zwaenepoel 和 Van de Peer,2019)。可使用 “-kf” 程序显示单一或多个物种间的 Ks 分布。可以看出,葡萄与黄瓜共享的三倍化事件的 Ks 峰差异很大,甚至葡萄和黄瓜的分化事件的 Ks 峰比黄瓜最近一次 WGD 的 Ks 峰还要小(图 4D)。由于物种的进化速率差异较大,即使是同一次 WGD,其 Ks 峰也可能有很大不同。因此,必要时需对 Ks 峰进行校正,然后推断多倍化时间(Wang 等,2017,2018;Yang 等,2020)。与基于聚类得到的旁系基因对(如 OrthoMCL 使用的方法)相比,WGDI 推断的 Ks 分布可大大减少串联重复或其他非共线性旁系基因带来的影响。

最后,使用基于基因树的方法验证多倍化推断。在本研究中,使用 “-a” 和 “-at” 程序,获得了葡萄和黄瓜的同源基因列表,并通过 ASTRAL-III v5.7.7 构建的 1138 个基因树推断其系统发育关系(Zhang 等,2018)(图 4E)。其中有 92 个基因树至少包含三个相同的黄瓜基因,占所有基因树的 8.08%。在一些缺失多个同源基因的基因树中,其结构仍支持黄瓜经历了一次较新的 WGD 的假设。总之,WGDI 将三种主要的 WGD 检测方法结合在一起,能够相互验证,帮助研究人员准确、高效地推断多倍化事件。

WGDI 在多层次基因组同源推理中的应用

花生(Arachis hypogaea)是一种异源多倍体,已被证明来源于两个祖先物种——Arachis duranensisArachis ipaensis 的杂交(Bertioli 等,2016, 2019;Zhuang 等,2019)。在此,我们以花生为例,说明如何通过以下步骤在异源多倍体中推断基因组同源关系:

第一步,使用同源点阵图和 Ks 点阵图对基因组同源性进行分层推理。通过 “-d” 和 “-bk” 程序输出结果可以看出,花生染色体1至10来自 A. duranensis,染色体11至20来自 A. ipaensis。然而,染色体3和13之间显然发生了易位(图 5A)。通过评估不同多倍化事件保留的共线区块的 Ks 值、区块标识等差异,可以使用 “-a” 程序轻松获得三种基因组间的同源基因列表(图 5B)。

第二步,使用比对树进行进一步的分层推理。通过 “-at” 程序,使用来自经历了染色体易位的花生3号染色体、A. duranensisA. ipaensis 染色体的同源基因列表构建了2376棵基因树,并以滑动窗口形式显示所有可能的树结构得分(图 5C)。其中1597棵支持花生起源于 A. duranensis,624棵支持起源于 A. ipaensis,与所推断的染色体易位一致。

图5. 以落花生(*Arachis hypogaea*)为例进行基因组同源性的分层推断

(A) 同源性点图和Ks值点图,比较选定的落花生(A. hypogaea)、杜兰花生(A. duranensis)和伊帕花生(A. ipaensis)的染色体。图中展示了落花生的染色体3和13,它们是由共有的双子叶植物六倍化事件产生的同源三联体,其匹配的染色体为杜兰花生的染色体3和伊帕花生的染色体4。

(B) 以杜兰花生为参考基因组,对落花生进行的比对结果。

(C) 在落花生染色体3的同源性列表中,所有可能的系统发育树结构的分布。

(D) 滑动窗口中落花生同源区域1(橙色)和同源区域组2(绿色)的基因保留率。

最后,通过“–r”和“–p”程序,分别展示了该异源四倍体中的基因保留情况和亚基因组分化情况。在异源四倍体落花生中,来自杜兰花生亚基因组的基因保留数量多于来自伊帕花生亚基因组的(见图5D)。此外,两套亚基因组或祖先二倍体基因组之间的分化(P指数)估计为0.86,说明它们存在显著差异,符合典型异源四倍体的特征。因此,WGDI使用多种方法,基于基因组同源性进行异源多倍化的分层推断,并生成由基因共线性支持的、与异源多倍体物种形成相关的同源基因的分层列表。

WGDI用于追踪祖先染色体核型的应用

葡萄(Vitis vinifera)的染色体核型广泛用作核心双子叶植物核型分析的参考。此前的核型分析表明,葡萄的祖先染色体发生过两次融合和四次断裂(Murat等,2015)。根据核型变化,有人推测耧斗菜(Aquilegia coerulea,毛茛科)是所有核心双子叶植物的亲本祖先之一,可能是一个古老的异源六倍体(Akoz和Nordborg,2019)。然而,我们使用“–km”程序,基于祖先双子叶植物核型(AEK)获得了葡萄和耧斗菜的核型。与之前的核型结果相比,我们在之前的空白区域恢复出了明显的共线性区块(见图6A)。例如,耧斗菜染色体2和染色体3的末端以及染色体5的起始部分对应于葡萄染色体4的中间区域(图6A),该区域是未注释区域(空白区域,参见Akoz和Nordborg,2020年的图6)。如果核型演化基于这些结果,可能会造成误导。

图6. 葡萄(*Vitis vinifera*)染色体4、7和14与耧斗菜(*Aquilegia coerulea*)染色体3和5的核型演化

(A) 选定的耧斗菜和葡萄染色体之间的同源性点图。图中七种不同颜色代表七条祖先单倍体染色体。

(B) 耧斗菜染色体3和5的构建过程。

(C) 葡萄染色体4、7和14的构建过程。

染色体数目减少与B染色体模型(Wang等,2015;Wang和Wang,2020)为理解真核生物染色体数目及其重排的演化提供了新方法。通过该模型,发现葡萄的祖先核型比以前推测的更加复杂但也更清晰。例如,粉红色和草绿色染色体在靠近各自一端的地方发生了交叉,形成了两个新染色体(图6C)。两段较长的片段融合成葡萄染色体14,之后在该染色体内部发生了倒位。两段较短的片段并未消失,而是与其他染色体融合,最终形成葡萄染色体4。粉红色和绿色染色体也发生了类似的融合,最终形成了现在的染色体7和4。

然而,耧斗菜的核型与葡萄完全不同。绿色染色体插入粉红色染色体,草绿色染色体与蓝色染色体发生交叉,随后分别演化为现在的染色体5和3(图6B)。因此,耧斗菜和葡萄的核型(参见Akoz和Nordborg,2020)并不能作为支持“耧斗菜基因组揭示核心双子叶植物杂交起源”的证据。与之前的研究结果相比,WGDI揭示的新结论可能更准确地反映了祖先染色体重排的动态过程。

讨论

基因共线性的分析可为多倍化研究提供有力的见解,多倍化在许多物种和系统的形成与演化中发挥了重要作用。WGDI尤其适用于识别频繁发生的多倍化事件,尤其是在高质量的染色体级别基因组基础上。该工具提供的分层推断和与WGD事件相关的基因共线性推断,有助于厘清因重复多倍化而复杂化的植物系统发育关系和核型演化。

WGDI在共线性检测方面的表现(见补充表1–4和补充图1–4)与以往工具(Wang等,2006, 2012;Tang等,2017)相当。

此外,WGDI在重建现存物种的祖先染色体核型方面也非常有效和实用。WGD会导致快速的基因组重组和结构变异,从而在新物种中产生新的染色体核型。理解这种核型演化对于评估某些系统位置尚存争议的谱系以及推测灭绝物种的基因组结构具有重要意义(Akoz和Nordborg,2020)。然而,分裂与融合模型(Salse等,2008;Murat等,2010)无法解释祖先基因组的染色体是如何演化为现今核型的(Wang等,2015)。例如,被推测为所有被子植物、单子叶植物和核心双子叶植物祖先核型(Murat等,2017)中,存在大量未注释(空白)区域。在核型演化过程中,共线性或共线性断裂是推断祖先核型的重要特征。相比简单的分裂–融合假说,植物与动物都需要更详细的染色体演化图谱(Akoz和Nordborg,2020)。WGDI能够提取更完整的共线性区块,有助于从祖先染色体中重建详细的核型演化过程。

WGDI采用了基于动态规划的共线性提取算法,并集成了多种用于可视化和分析的计算程序。对分层和事件相关共线性的推断,有助于厘清被反复多倍化干扰的真实系统发育关系。WGDI可通过GitHub(GitHub - SunPengChuan/wgdi: WGDI: A user-friendly toolkit for evolutionary analyses of whole-genome duplications and ancestral karyotypes)免费获取,并支持conda环境和bioconda平台(Grüning等,2018),实现兼容、易于安装和升级的工具使用体验。

相关文章:

WGDI-分析WGD及祖先核型演化的集成工具-文献精读126

WGDI: A user-friendly toolkit for evolutionary analyses of whole-genome duplications and ancestral karyotypes WGDI:一款面向全基因组重复事件与祖先核型演化分析的易用工具集 摘要 在地球上大多数主要生物类群中,人们已检测到全基因组复制&…...

旋转矩阵公式理解

这里给出其中一种理解方法: 设原始直角坐标系下的坐标为(x,y),我们可以将它分解为两个向量(x,0)和(0,y)。接下来将两个向量分别顺时针旋转θ度,二者就会分别变成:(xcosθ,xsinθ)和(-ysinθ,ycosθ)。 也就是说,二者…...

网络Tips20-002

1..某主机接口的IP地址为192.16.7.131/26.则该IP地址所在网络的广播地址是:192 16.7.191 广播地址是指在特定网络上发送广播消息的地址。它用于向网络上的所有设备发送信息。 方法1:广播地址掩码取反和网络地址的或运算 方法2:广播地址将网…...

firewall docker 冲突问题解决(亲测有效)

# 关闭iptables,使用firewall systemctl disable iptables # 禁用服务 systemctl stop iptables # 关闭服务 systemctl status iptables # 查看服务状态 systemctl enable firewalld # 设置防火墙开机自启动 systemctl start firewalld # 开启服务 systemctl s…...

SwiftUI-MLX本地大模型开发(二)

介绍 在 SwiftUI-MLX本地大模型开发一文中,我们已经详细讲了如何利用 MLX 进行本地大模型的开发。但是通过案例可以发现 2 个问题: MLX 内置的大模型数量有限。每次大模型都需要从 HuggingFace 下载。 如何解决这 2 个问题,方案是&#xff1a…...

基于「骑手外卖系统」串联7大设计原则

你说得对!这些设计原则听起来都很抽象、很“玄”,如果不是实际开发过系统,很难理解“到底为什么要这样设计”。 那我现在就用一个你能想象得很清楚的真实例子,帮你把这7个设计原则一一落地到具体情境里,你会一眼明白。…...

泰迪杯特等奖案例学习资料:基于时空图卷积网络的城市排水系统水位精准重建与异常检测

(第十四届泰迪杯数据挖掘挑战赛A题特等奖案例解析) 一、案例背景与核心挑战 1.1 应用场景与行业痛点 城市排水系统(Urban Drainage Network, UDN)是城市基础设施的重要组成部分,其运行效率直接影响防洪排涝能力和水环境质量。然而,实际运维中面临以下难题: 监测数据稀…...

嵌入式Linux应用项目----智能网关

一、网关概述: Linux网关的作用在于,通过蓝牙、LoRa、串口、CAN等接口,与哪些无法连接网络的设备建立联系,将它们的数据转发至服务器。这过程中,网关充当了数据的桥梁,将下级设备所产生的数据发送至服务器。…...

C++ 中的继承

目录 前言 一、继承的概念及定义 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 五、继承与友元 六、继承与静态成员 七、复杂的菱形继承及菱形虚拟继承 (一)单继承与多继承 (二)菱形继承 …...

【中间件】brpc_基础_用户态线程上下文

文章目录 context介绍1 简单介绍2 主要功能2.1 上下文结构定义2.2 上下文切换实现2.3 协程栈管理2.4 平台兼容性处理2.5 性能优化 3 关键代码逻辑示例3.1 上下文初始化 (bthread_make_fcontext)3.2 上下文切换 (bthread_jump_fcontext) 4 与 BRPC 其他模块的协作5 性能与稳定性…...

蟋蟀的叫声,大自然的温度计

夏夜草丛中,蟋蟀的鸣叫声此起彼伏。有趣的是,它们的叫声频率竟然与气温有关!根据图片中的公式: 气温 ( X 8 ) 5 9 \text{气温} \frac{(X 8) \times 5}{9} 气温9(X8)5​ 只需记录蟋蟀在 15 秒内的鸣叫次数( X X X…...

文献总结:TPAMI端到端自动驾驶综述——End-to-End Autonomous Driving: Challenges and Frontiers

端到端自动驾驶综述 1. 文章基本信息2. 背景介绍3. 端到端自动驾驶主要使用方法3. 1 模仿学习3.2 强化学习 4. 测试基准4.1 真实世界评估4.2 在线/闭环仿真测试4.3 离线/开环测试评价 5. 端到端自动驾驶面临的挑战5.1 多模态输入5.2 对视觉表征的依赖5.3 基于模型的强化学习的世…...

二极管反向恢复的定义和原理

二极管的反向恢复定义 二极管的反向恢复是指二极管从正向导通状态切换到反向阻断状态时,电流从正向变为负向并最终回到零所需的时间。具体过程如下: 正向导通:当二极管正向偏置时,电流可以顺利通过,此时二极管处于导…...

# 基于词袋模型(BoW)的猫狗图像分类实践

基于词袋模型(BoW)的猫狗图像分类实践 在计算机视觉领域,图像分类是一项基础且重要的任务。本文将介绍如何使用词袋模型(Bag of Words, BoW)结合支持向量机(SVM)实现猫狗图像分类。通过详细的代…...

Vscode+git笔记

1.U是untracked m是modify modified修改了的。 2.check out 查看观察 3 status changed 暂存区 4.fetch v 取来拿来 5.orangion 起源代表远程分支 git checkout就是可以理解为进入的意思。...

生成式 AI 的未来

在人类文明的长河中,技术革命始终是推动社会跃迁的核心引擎。从蒸汽机解放双手,到电力点亮黑夜,再到互联网编织全球神经网络,每一次技术浪潮都在重塑人类的生产方式与认知边界。而今天,生成式人工智能(Generative AI)正以一种前所未有的姿态登上历史舞台——它不再局限于…...

进程间通信(IPC)

进程间通信(IPC)是操作系统中非常重要且基础的概念,涉及到不同进程之间如何交换数据和同步操作。下面我会一个一个地详细讲解这几种常见的IPC方式:管道(包含匿名管道和有名管道)、消息队列、共享内存、信号量、Socket通信,内容尽量用通俗易懂的语言,并结合具体原理、优…...

C语言奇幻指南:宏、头文件与变量的秘密世界

&#x1f31f; C语言奇幻指南&#xff1a;宏、头文件与变量的秘密世界 &#x1f31f; 一、写一个“比小”宏&#xff1a;三目运算符的魔法 目标&#xff1a;定义一个宏&#xff0c;返回两个参数中较小的值。 代码&#xff1a; #define MIN(a, b) ((a) < (b) ? (a) : (b))…...

【开源免费】二维码批量识别-未来之窗——C#-仙盟创梦IDE

二维码批量识别工具&#xff0c;借助先进图像识别技术&#xff0c;能快速准确读取大量二维码信息。适用于物流与供应链管理&#xff0c;如库存盘点和货物追踪&#xff1b;可用于资产管理&#xff0c;像固定资产盘点与设备巡检&#xff1b;还能助力数据收集与市场调研&#xff0…...

n8n工作流自动化平台的实操:解决中文乱码

解决问题&#xff1a; 通过ftp读取中文内容的文件&#xff0c;会存在乱码&#xff0c;如下图&#xff1a; 解决方案 1.详见《安装 iconv-lite》 2.在code节点&#xff0c;写如下代码&#xff1a; const iconv require(iconv-lite);const items $input.all(); items.forEa…...

MCP 探索:MCP 集成的相关网站 Smithery、PulseMCP 等

简简单单 Online zuozuo :本心、输入输出、结果 文章目录 MCP 探索:MCP 集成的相关网站 Smithery、PulseMCP 等前言一、MCP 集成基础二、利用热门资源平台集成三、集成常见 MCP 服务四、管理集成的 MCP 能力五、集成示例借鉴六、数据交互与安全管理MCP 探索:MCP 集成的相关网…...

linux的时间轮

时间轮&#xff1a;高效管理海量定时任务的利器 1. 引言&#xff1a;为什么需要时间轮&#xff1f; 在许多应用场景中&#xff0c;我们都需要管理大量的定时任务&#xff0c;例如&#xff1a; 网络连接的超时检测。分布式系统中的心跳检测。缓存条目的过期淘汰。需要延迟执行…...

《操作系统真象还原》第十二章(2)——进一步完善内核

文章目录 前言可变参数的原理实现系统调用write更新syscall.h更新syscall.c更新syscall-init.c 实现printf编写stdio.h编写stdio.c 第一次测试main.cmakefile结果截图 完善printf修改main.c 结语 前言 上部分链接&#xff1a;《操作系统真象还原》第十二章&#xff08;1&#…...

MIT6.S081-lab8前置

MIT6.S081-lab8前置 注&#xff1a;本部分除了文件系统还包含了调度的内容。 调度 调度涉及到保存寄存器&#xff0c;恢复寄存器&#xff0c;就这一点而言&#xff0c;和我们的 trap 很像&#xff0c;但是实际上&#xff0c;我们实现并不是复用了 trap 的逻辑&#xff0c;我…...

Java从入门到精通 - Java语法

Java 语法 此笔记参考黑马教程&#xff0c;仅学习使用&#xff0c;如有侵权&#xff0c;联系必删 文章目录 Java 语法01 变量详解1. 变量里的数据在计算机中的存储原理1.1 二进制1.2 十进制转二进制的算法1.3 计算机中表示数据的最小单元总结1.4 字符在计算机中是如何存储的呢…...

【CF】Day50——Codeforces Round 960 (Div. 2) BCD

B. Array Craft 题目&#xff1a; 思路&#xff1a; 有点意思的构造 首先题目告诉我们 y < x&#xff0c;这是一个重要的条件 我们先来考虑简单情况&#xff0c;假如可以放0进去&#xff0c;那么我们只需要在 y ~ x 之间全放 1 &#xff0c;其余都是 0 即可&#xff0c;但…...

MySQL 日期加减函数详解

MySQL 日期加减函数详解 1. DATE_ADD 函数 基本语法 DATE_ADD(date, INTERVAL expr unit)功能 在指定日期/时间上添加一个时间间隔 参数说明 date&#xff1a;要处理的日期/时间值&#xff08;可以是DATE, DATETIME或TIMESTAMP类型&#xff09;expr&#xff1a;要添加的间…...

NV189NV195美光固态闪存NV197NV199

NV189NV195美光固态闪存NV197NV199 在存储技术持续迭代的2025年&#xff0c;美光固态闪存NV189、NV195、NV197、NV199系列凭借其差异化的性能定位&#xff0c;正在重新定义数据存储的边界。本文将从技术参数、场景适配、行业价值等维度&#xff0c;为不同领域的专业人士提供深度…...

C语言-回调函数

回调函数 通过函数指针调用函数&#xff0c;而这个被调用的函数称为回调函数 回调函数是C语言中一种强大的机制&#xff0c;允许将函数作为参数传递给其他函数&#xff0c;从而在特定时机由后者调用。它的核心在于函数指针的使用 以下是回调函数的使用例子 先创建好一个函数…...

启发式算法-蚁群算法

蚁群算法是模拟蚂蚁觅食行为的仿生优化算法&#xff0c;原理是信息素的正反馈机制&#xff0c;蚂蚁通过释放信息素来引导同伴找到最短路径。把问题的元素抽象为多条路径&#xff0c;每次迭代时为每只蚂蚁构建一个解决方案&#xff0c;该解决方案对应一条完整的路径&#xff0c;…...

DeepSeek与MySQL:开启数据智能新时代

目录 一、引言&#xff1a;技术融合的力量二、DeepSeek 与 MySQL&#xff1a;技术基石2.1 DeepSeek 技术探秘2.2 MySQL 数据库深度解析 三、DeepSeek 与 MySQL 集成&#xff1a;从理论到实践3.1 集成原理剖析3.2 集成步骤详解 四、应用案例&#xff1a;实战中的价值体现4.1 电商…...

Modbus 通讯协议(超详细,简单易懂)

目录 一、协议中的寄存器定义 二、协议概述 三、使用串口的Modbus 报文帧 ​编辑 3.1、Modbus ASCII 模式 3.2、Modbus RTU 模式 3.3、功能码概要 3.4、Modbus 报文分析 四、什么是RS-485 RS-232&#xff1f; 一、协议中的寄存器定义 阅读 Modbus 协议时会发现它的概念别扭…...

单细胞测序试验设计赏析(一)

单细胞测序试验设计赏析&#xff08;一&#xff09; 单细胞测序试验设计中&#xff0c;单细胞测序技术通常会结合其它的技术来共同说明问题&#xff0c;或者结合年龄、性别等临床数据&#xff0c;进行分层分析说明问题以下以发表文章来进行一定的分析。 Single-cell RNA seque…...

ES6入门---第二单元 模块三:对象新增、

一&#xff1a;对象简洁语法&#xff1a; 1、变量简洁 <script>let name Strive;let age 18;let json {name, //name:name,age //age:age};console.log(json);</script> 2、函数简洁 let json {name, //name:name,age, //age:age/* showA:functi…...

多元随机变量协方差矩阵

主要记录多元随机变量数字特征相关内容。 关键词&#xff1a;多元统计分析 二元随机变量(X, Y) 说明&#xff1a;可以理解变量中的 X为身高、Y为体重 总体协方差 σ X Y c o v ( X , Y ) E [ ( X − μ X ) ( Y − μ Y ) ] E ( X Y ) − μ X μ Y \sigma_{XY}cov(X, Y)E[…...

计算机网络-同等学力计算机综合真题及答案

计算机网络-同等学力计算机综合真题及答案 &#xff08;2003-2024&#xff09; 2003 年网络 第二部分 计算机网络&#xff08;共 30 分&#xff09; &#xff08;因大纲变动因此 2004 年真题仅附真题&#xff0c;不作解析。&#xff09; 一、填空题&#xff08;共 10 分&#…...

[案例二] 菜单条制作(Menuscript)与工具条制作(Toolbar)

最近五一正好毕业论文盲审,抽时间研究一下菜单条制作(Menuscript)与工具条制作(Toolbar)的制作,在NX二次开发中唐康林老师已经讲的很详细了,在这里只对视频中的内容进行总结,并且根据自己的想法进行补充。在里海博主的直播教学中发现一个很有趣的NX图标工具,本人大概做了一…...

bellard.org‌ : QuickJS 如何使用 qjs 执行 js 脚本

参阅上一篇&#xff1a;Fabrice Bellard&#xff08;个人网站&#xff1a;‌bellard.org‌&#xff09;介绍 Fabrice Bellard&#xff08;个人网站&#xff1a;‌bellard.org‌&#xff09;是计算机领域最具影响力的程序员之一&#xff0c;其贡献跨越多个技术领域并持续推动开…...

计组复习笔记 3

前言 继续做例题。昨天做到第一个就把我难住了。可恶。 4.1 地址码越长&#xff0c;操作码越短。因为两者加起来是指令字&#xff0c;指令字的大小一般是固定的。扩展编码按照操作码从短到长进行编码。算了先放一下。我先看一下别的复习资料。等会儿再看这个题。 鼓励自己 …...

GCD 深入解析:从使用到底层实现

前言 Grand Central Dispatch (GCD) 是 Apple 基于 C 语言开发的一套完整的并发编程框架。它不仅仅是一个简单的线程管理工具&#xff0c;而是一个高度优化的并发编程解决方案。GCD 的设计理念是将并发编程的复杂性封装在框架内部&#xff0c;为开发者提供简单易用的接口。本文…...

JavaScript中的AES加密与解密:原理、代码与实战

前言 关于有js加密、js解密&#xff0c;js业务相关&#xff0c;找jsjiami官网站长v。 另外前段时间做了个单子跑单了&#xff0c;出售TEMU助手。eller点kuajingmaihuo点com的全自动化助手&#xff0c;可以批量合规&#xff0c;批量实拍图&#xff0c;批量资质上传等。 一、A…...

计算机组成原理实验(7) 堆指令部件模块实验

实验七 堆指令部件模块实验 一、实验目的 1、掌握指令部件的组成方式。 2、熟悉指令寄存器的打入操作&#xff0c;PC计数器的设置和加1操作&#xff0c;理解跳转指令的实现过程。 二、实验要求 按照实验步骤完成实验项目&#xff0c;掌握数据打入指令寄存器IR1、PC计数器的…...

Windows系统下Node.js环境部署指南:使用nvm管理多版本

Windows系统下Node.js环境部署指南&#xff1a;使用nvm管理多版本 一、Node.js介绍二、为什么需要nvm&#xff1f;三、安装前的准备工作1. 本次环境说明2. 卸载现有Node.js&#xff08;如有&#xff09; 三、nvm-windows安装步骤1. 下载安装包2. 安装过程3. 验证安装 四、使用n…...

数据结构*队列

队列 什么是队列 是一种线性的数据结构&#xff0c;和栈不同&#xff0c;队列遵循“先进先出”的原则。如下图所示&#xff1a; 在集合框架中我们可以看到LinkedList类继承了Queue类&#xff08;队列&#xff09;。 普通队列&#xff08;Queue&#xff09; Queue中的方法 …...

C语言蓝桥杯真题代码

以下是不同届蓝桥杯C语言真题代码示例&#xff0c;供参考&#xff1a; 第十三届蓝桥杯省赛 C语言大学B组 真题&#xff1a;卡片 题目&#xff1a;小蓝有很多数字卡片&#xff0c;每张卡片上都是数字1-9。他想拼出1到n的数列&#xff0c;每张卡片只能用一次&#xff0c;求最大的…...

Sharding-JDBC分库分表中的热点数据分布不均匀问题及解决方案

引言 在现代分布式应用中&#xff0c;使用Sharding-JDBC进行数据库的分库分表是提高系统性能和扩展性的常见策略。然而&#xff0c;在实际应用中&#xff0c;某些特定的数据&#xff08;如最新订单、热门商品等&#xff09;可能会成为“热点”&#xff0c;导致这些部分的数据处…...

Dagster中的Ops与Assets:数据管道构建的两种选择

Dagster是一个强大的数据编排平台&#xff0c;它提供了多种工具来帮助数据工程师构建可靠的数据管道。在Dagster中&#xff0c;Ops和Assets是两种核心概念&#xff0c;用于定义数据处理逻辑。本文将全面介绍Ops的概念、特性及其使用方法&#xff0c;特别补充了Op上下文和Op工厂…...

thonny提示自动补全功能

THONNY IDE 自动补全功能配置 在 Thonny IDE 中启用和优化自动补全功能可以显著提升编程体验。为了确保该功能正常工作&#xff0c;需要确认几个设置选项。 配置自动补全 Thonyy IDE 的自动补全默认情况下是开启的。如果发现自动补全未按预期运行&#xff0c;可以通过调整首选…...

PyTorch_阿达玛积

阿达玛积指的是矩阵对应位置的元素相乘&#xff0c;可以使用乘号运算符&#xff0c;也可以使用mul函数来完成计算。 代码 import torch import numpy as np # 1. 使用 mul 函数 def test01():data1 torch.tensor([[1, 2], [3, 4]])data2 torch.tensor([[5, 6], [7, 8]])dat…...

蓝桥杯 摆动序列

摆动序列 原题目链接 题目描述 如果一个序列的奇数项都比前一项大&#xff0c;偶数项都比前一项小&#xff0c;则称为一个摆动序列。 即对于任意整数 i&#xff08;i ≥ 1&#xff09;满足&#xff1a; a₂ᵢ < a₂ᵢ₋₁&#xff0c;a₂ᵢ₊₁ > a₂ᵢ 小明想知道&…...