R绘图|6种NMDS(非度量多维分析)绘图保姆级模板——NMDS从原理到绘图,看师兄这篇教程就够了
感谢西农听雨同学对本文提供的大力支持!
一、引言
非度量多维尺度分析(NMDS)是一种用来简化复杂数据的工具,特别适合处理那些难以直接理解的高维数据(微生物群落数据)。它的主要目的是把数据“压缩”到更低的维度(降维操作),比如二维或三维,这样我们就能更容易地用图形来展示和理解数据之间的关系。
NMDS的核心思想是,它不直接使用原始数据,而是基于数据点之间的相似性或距离矩阵。通过一系列的迭代计算,它试图在低维空间中重新排列这些点,使得它们之间的相对距离尽可能接近原始高维空间中的距离。这样一来,即使数据被简化了,我们仍然能大致看出它们之间的相似性或差异性。
这种方法在生态学、生物统计学和社会科学等领域特别有用,它能帮助研究人员直观地展示复杂的模式或关系。简单来说,NMDS就是帮你把复杂的数据“画”出来,让你一眼就能看出其中的规律。
1.1 本代码绘图结果
图源:本R代码输出图
1.2 NMDS计算原理
NMDS是一种非度量方法,可作为主坐标分析(PCoA)的替代方案。它能够使用任意样本间的相异性测度,核心目标是将样本投射到低维排序空间(通常为二维或三维),使其欧几里得距离尽可能匹配原始相异性指数所表示的相异程度。之所以称为“非度量”,是因为 NMDS 不直接使用原始的相异性数值,而是将其转换为秩次(ranks),并在计算过程中基于这些秩次进行优化。
该算法采用迭代方式,首先从初始样本分布开始,在排序空间中不断调整样本位置,以寻找最优的最终分布。由于其迭代特性,每次运行可能会得到不同的解决方案。
1.3 算法流程简述:
1.指定维度数 m:设定目标维度 m,即希望将样本的高维分布降维至 m 维,这也是“尺度缩放(scaling)”的本质。
2.构建初始样本配置:在 m 维空间中生成所有样本的初始位置,作为迭代优化的起点。这个初始配置至关重要,因为它可能影响最终结果。初始配置可以随机生成,但更优的方法是利用其他排序方式(例如基于相同相异性矩阵的 PCoA 结果)提供更合理的起始位置。
3.迭代优化样本位置:在设定的维度数内,不断调整样本的位置,使排序空间中的真实(欧几里得)距离尽可能匹配样本间的相异性指数。拟合程度由“应力值(stress value)”衡量,应力值越低,拟合效果越好。
4.终止条件:当新的迭代无法进一步降低应力值时,算法停止,最终解确定。
5.旋转最终解:由于 NMDS 本身不会直接生成排序轴(ordination axes),算法完成后通常会通过主成分分析(PCA)对最终解进行旋转,以便更容易解释数据。这也是最终排序图仍然带有排序轴的原因。
6.添加物种得分:与 PCoA 类似,NMDS 结果本身不包含物种得分(species scores),这些得分需要在最终样本配置的基础上通过加权平均法(weighted averaging)添加。
二、示例数据和R代码
2.1 准备数据
otus.txt,物种丰度表,该表格是模拟的数据,不具备实际意义!
group.txt,分组信息表,用于后续样本绘制等,也不具备实际意义
⚠️根据自己的数据进行整理后绘图,有问题可以留言获取帮助
2.2 R代码
⚠️该代码适用于上述数据,要完成自己的任务适当调整!
这段 R 代码首先清理环境并加载必要的 R 包(如 ggplot2
、vegan
、tidyverse
等),然后读取 OTU 表 (otus.txt
) 和分组信息 (group.txt
)。接着,对数据进行稀释(Rarefaction),确保所有样本测序深度一致,并计算 Bray-Curtis 距离矩阵,以衡量样本间的相似性。随后,使用 PERMANOVA(置换多元方差分析) 检测不同实验组之间的微生物群落组成是否存在显著差异。之后,利用 NMDS(非度量多维尺度分析) 对距离矩阵进行降维,并计算应力值 (stress
),判断拟合优度。最后,代码生成多种 NMDS 可视化图(如基本散点图、多边形包络、椭圆包络、凸包等),并保存为 PDF 文件,以展示群落结构的差异性。
2.2.1R包加载并导入数据
############清理环境############
rm(list=ls())##########加载必要的包##############
library(ggplot2)
library(ggrepel) # 用于更好地显示文本标签,防止标签重叠
library(ggthemes) # 提供更多主题
library(viridis) # 连续或离散调色板
library(ggforce) # 有一些特殊几何体函数,比如 geom_mark_ellipse
library(tidyverse)
library(vegan)###############读取OTU表和分组表#################
bac_asv <- read.delim("otus.txt", row.names = 1, sep = '\t', header = T)
bac_group <- read.delim("group.txt",row.names = 1 , sep = '\t' , header = T)
2.3 数据整理
# ###############对样本进行抽平#################
set.seed(125)
bac_asv_rari <- as.data.frame(t(rrarefy(t(bac_asv),min(colSums(bac_asv))))) %>% # 先计算每一列(即每个样本)的序列总和,并找出最小的总和。rrarefy() 函数对 “转置后” 的矩阵进行稀有化处理,使得每个样本(现在是每一行)的序列计数等于最小的样本序列总和,然后再转回原来的行列关系。filter(.,rowSums(.)>0) # 筛选出每个asv(相当于行的总数)大于0的
colSums(bac_asv_rari)
bac_asv_rari###################计算距离矩阵##################
##> 计算bray_curtis距离:NMDS分析或PCoA分析
bac_distance <- bac_asv_rari %>%t() %>% # 行名是样本vegdist(method = 'bray') # Bray-Curtis 距离是一genus度量两个样本在物genus组成上差异的方法bac_data <- bac_asv_rari %>%t() %>%as.data.frame() %>%rownames_to_column(var = 'sample_name') %>%left_join(.,bac_group,by = 'sample_name')#PERMANOVA是一种非参数检验方法,用于评估不同组别间的差异是否具有统计学意义。
#与后续绘图没有直接关联,可不运行
# 置换多元方差分析(PERMANOVA):不符合正态分布
PERMANOVA_bac <- adonis2(bac_distance ~ Group , data = bac_data , permutations = 999)
PERMANOVA_bac#######NMDS用于可视化样本间的相似性或差异性,但它本身无法判断差异是否显著。
###> NMDS分析:应力值小于0.2被认为是一个很好的拟合
set.seed(156)
# #NMDS排序,定义2个维度,详情?metaMDS
bac_NMDS <- metaMDS(bac_distance, k = 2)
# 应力函数值,一般不大于 0.2 为合理
bac_NMDS$stress
bac_NMDS_points <- as.data.frame(bac_NMDS$points) %>% rownames_to_column(var = 'sample_name') %>%left_join(.,bac_group,by='sample_name')
2.3.1 绘图模板1
# Draw Plot# 获取世界地图数据# https://rdrr.io/cran/maps/man/world.htmlworld <- map_data("world") p1 <- ggplot() + geom_polygon(data = world, aes(x = long, y = lat, group = group), color = "grey20", fill = "#FCF8E5", linewidth = 0.2) +theme(panel.background = element_rect(fill = "#A0C7E3", colour = "white"))+ylim(c(-55, 83)) +coord_quickmap()p1p2 <- p1 +geom_scatterpie(data = data,aes(x = Longitude, y = Latitude, r = log10(Size + 1)*2),cols = colnames(data[, 4:15]), color = "black", linewidth = 0.3) +scale_fill_manual(values = colors) +geom_scatterpie_legend(r = log10(data$Size + 1)*2, x = -150, y = -30, labeller = function(x) (10^(x/2)), size = 2, n = 4) + theme(legend.text = element_text(size = 6, colour = 'grey20'),legend.key.size = unit(0.3,'cm'),legend.key.spacing.y = unit(0, 'cm'),legend.title = element_blank(),legend.position = "bottom",panel.grid = element_blank(),axis.text = element_blank(),axis.ticks = element_blank(),axis.title = element_blank() )
p2
ggsave("map.png",height=6,width=12,dpi=300)
ggsave("map.pdf",height=6,width=12,dpi=300)
输出结果
2.3.2 绘图模板2
#####################绘图模板2##################
bac_NMDS_p1 <- bac_NMDS_p + geom_polygon(aes(x = MDS1, y = MDS2, fill = Group, group = Group, color = Group),alpha = 0.1, linetype = "longdash", linewidth = 1.5 ,show.legend = FALSE)+labs(title = "NMDS (Example 1)", x = "NMDS1", y = "NMDS2")
bac_NMDS_p1
ggsave(plot = bac_NMDS_p1,filename = "NMDS1.pdf",dpi = 300,width = 8,height = 6)
ggsave(plot = bac_NMDS_p1,filename = "NMDS1.png",dpi = 300,width = 8,height = 6)
输出结果
2.3.3 绘图模板3
########################绘图模板3##########################
bac_NMDS_p2 <- ggplot(bac_NMDS_points, aes(x = MDS1, y = MDS2, color = Group)) +geom_point(size = 4, alpha = 0.8) +# 椭圆包络stat_ellipse(aes(fill = Group), geom = "polygon", alpha = 0.2, show.legend = FALSE) +# 在图中加上 stress 值annotate("text", x = 1, y = 2, label = paste0("Stress = ", round(bac_NMDS$stress, 3)), size = 5) +# 手动设置颜色和填充,也可用 scale_color_manualscale_color_viridis(discrete = TRUE, option = "D") +scale_fill_viridis(discrete = TRUE, option = "D") +theme_bw() +theme(panel.grid.major = element_line(color = "grey85"), panel.grid.minor = element_blank(),legend.position = "right",axis.title.y = element_text(size = 26,color="black"),axis.title.x = element_text(size = 26,color="black"),legend.title = element_blank()) +labs(title = "NMDS (Example 2)", x = "NMDS1", y = "NMDS2")
bac_NMDS_p2
ggsave(plot = bac_NMDS_p2,filename = "NMDS2.pdf",dpi = 300,width = 8,height = 6)
ggsave(plot = bac_NMDS_p2,filename = "NMDS2.png",dpi = 300,width = 8,height = 6)
输出结果
2.3.4 绘图模板4
############################模板4############################
# 计算各组的中心(这里用平均值)
centroids <- bac_NMDS_points %>%group_by(Group) %>%summarise(MDS1 = mean(MDS1), MDS2 = mean(MDS2))
bac_NMDS_p3 <- ggplot(bac_NMDS_points, aes(x = MDS1, y = MDS2, color = Group)) +# 绘制星形连接线:每个点 -> 对应分组的中心geom_segment(data = bac_NMDS_points %>% left_join(centroids, by="Group", suffix = c("", "_centroid")),aes(xend = MDS1_centroid, yend = MDS2_centroid),alpha = 0.4) +geom_point(size = 15) +# 绘制分组中心点geom_point(data = centroids, aes(x = MDS1, y = MDS2, color = Group), size = 20, shape = 8, stroke = 2,show.legend = F) +# 标注 stressannotate("text", x = 0.8, y = 0.9, label = paste0("Stress = ", round(bac_NMDS$stress, 3)), size = 5, color = "red") +scale_color_manual(values = c("#DE582B","#1868B2","#018A67","#F3A332"))+# ggdark::dark_theme_bw(base_size = 14) + # 来自 ggdarktheme_bw()+theme(legend.position = "right",legend.title = element_blank(),axis.text = element_text(size = 30,color="black"),axis.title = element_text(size = 30,color="black"),legend.text = element_text(size = 20),plot.title = element_text(size = 30)) +labs(title = "NMDS (Example 3)",x = "NMDS1", y = "NMDS2")
bac_NMDS_p3
ggsave(plot = bac_NMDS_p3,filename = "NMDS3.pdf",dpi = 300,width = 10,height = 8)
ggsave(plot = bac_NMDS_p3,filename = "NMDS3.png",dpi = 300,width = 10,height = 8)
输出结果
2.3.5 绘图模板5
###########################模板5###############################
bac_NMDS_p4 <- ggplot(bac_NMDS_points, aes(x = MDS1, y = MDS2)) +# 多边形包络geom_polygon(aes(color = Group, fill = Group), alpha = 0.1, show.legend = FALSE, linetype = "dashed") +# 散点geom_point(aes(color = Group), size = 10) +# repel 标签,避免重叠# geom_text_repel(aes(label = sample_name, color = Group),# size = 3.5,# box.padding = 0.3,# max.overlaps = 10) +# 加入 stressannotate("text", x = 0.8, y = 0.8, label = paste0("Stress = ", round(bac_NMDS$stress, 3)), size = 5,color = "black") +scale_color_manual(values = c("#DE582B","#1868B2","#018A67","#F3A332")) +scale_fill_manual(values = c("#DE582B","#1868B2","#018A67","#F3A332")) +labs(x = "NMDS1", y = "NMDS2", title = "NMDS (Example 4)") +theme_bw(base_size = 14) +theme(legend.position = "bottom",legend.title = element_blank(),panel.grid = element_blank(),axis.text = element_text(size = 30,color="black"),axis.title = element_text(size = 30,color="black"),legend.text = element_text(size = 20))
bac_NMDS_p4
ggsave(plot = bac_NMDS_p4,filename = "NMDS4.pdf",dpi = 300,width = 10,height = 8)
ggsave(plot = bac_NMDS_p4,filename = "NMDS4.png",dpi = 300,width = 10,height = 8)
输出结果
2.3.6 绘图模板6
##########################模板6##############################
# 1. 计算每个分组的凸包:chull() 函数可以得到“围住”散点的最小多边形
hull_data <- bac_NMDS_points %>%group_by(Group) %>%slice(chull(MDS1, MDS2)) # 对每组数据分别计算凸包的索引,再取子集
# 2. 绘图
bac_NMDS_p5 <- ggplot(bac_NMDS_points, aes(x = MDS1, y = MDS2, color = Group)) +# 填充凸包区域geom_polygon(data = hull_data, aes(fill = Group), alpha = 0.3, # color = "red",show.legend = FALSE) +# 绘制散点geom_point(size = 3, alpha = 0.8) +# 在图中加上 Stress 值annotate("text",x = 0.8,y = 0.8,label = paste0("Stress = ", round(bac_NMDS$stress, 3)),size = 5,color = "black") +scale_color_manual(values = c("#DE582B","#1868B2","#018A67","#F3A332"))+scale_fill_manual(values = c("#DE582B","#1868B2","#018A67","#F3A332"))+coord_fixed() + # X轴与Y轴1:1缩放labs(title = "NMDS (Example 5)",x = "NMDS1", y = "NMDS2") +theme_bw(base_size = 14) +theme(legend.position = "right",legend.title = element_blank(),plot.title = element_text(hjust = 0.5, face = "bold", size = 16))
bac_NMDS_p5
ggsave(plot = bac_NMDS_p5,filename = "NMDS5.pdf",dpi = 300,width = 10,height = 8)
ggsave(plot = bac_NMDS_p5,filename = "NMDS5.png",dpi = 300,width = 10,height = 8)
输出结果
四、相关信息
!!!本文内容由小编总结互联网和文献内容总结整理,如若侵权,联系立即删除!
!!!有需要的小伙伴评论区获取今天的测试代码和实例数据。
📌示例代码中提供了数据和代码,小编已经测试,可直接运行。
以上就是本节所有内容。
如果这篇文章对您有用,请帮忙一键三连(点赞、收藏、评论、分享),让该文章帮助到更多的小伙伴。
相关文章:
R绘图|6种NMDS(非度量多维分析)绘图保姆级模板——NMDS从原理到绘图,看师兄这篇教程就够了
感谢西农听雨同学对本文提供的大力支持! 一、引言 非度量多维尺度分析(NMDS)是一种用来简化复杂数据的工具,特别适合处理那些难以直接理解的高维数据(微生物群落数据)。它的主要目的是把数据“压缩”到更低…...
spark-SQL核心编程
1. Spark-SQL简介 起源与发展:Spark-SQL前身为Shark,因对Hive依赖制约Spark发展而被弃用。它汲取Shark优点重新开发,在数据兼容、性能优化和组件扩展方面表现出色。 特点:易整合,统一数据访问,兼容Hive&…...
使用MCP服务通过自然语言操作数据库(vscode+cline版本)
使用MCP服务操纵数据库(vscodecline版本) 本文主要介绍,在vscode中使用cline插件调用deepseek模型,通过MCP服务器 使用自然语言去操作指定数据库。本文使用的是以己经创建号的珠海航展数据库。 理解MCP服务: MCP(Model Context…...
.NET Core DI(依赖注入)的生命周期及应用场景
在.NET中,依赖注入(DI,Dependency Injection)是一种设计模式,它通过将依赖关系注入到类中,而不是让类自己创建依赖项,来降低类之间的耦合度。这使得代码更加模块化、灵活和易于测试。在.NET中&a…...
VSCode写java时常用的快捷键
首先得先安好java插件 1、获取返回值 这里是和idea一样的快捷键的,都是xxxx.var 比如现在我new一个对象 就输入 new MbDo().var // 点击回车即可变成下面的// MbDo mbDo new MbDo()//以此类推get方法也可获取 mbDo.getMc().var // 点击回车即可变成下面的 // St…...
Java微服务流量控制与保护技术全解析:负载均衡、线程隔离与三大限流算法
在微服务架构中,流量控制与系统保护是保障服务高可用的核心要素。本文将深入剖析负载均衡原理、线程隔离机制,并通过Java代码实例详解滑动窗口、漏桶、令牌桶三大限流算法,帮助开发者构建健壮的分布式系统。 一、负载均衡核心原理与实践 1.1 …...
Java 企业级应用:SOA 与微服务的对比与选择
企业级应用开发中,架构设计是决定系统可扩展性、可维护性和性能的关键因素。SOA(面向服务的架构)和微服务架构是两种主流的架构模式,它们各自有着独特的和设计理念适用场景。本文将深入探讨 SOA 和微服务架构的对比,并…...
Nacos深度剖析与实践应用 -1
📹 Nacos背景 在现在数字化快速发展的时代🚄,微服务架构已成为构建大型分布式系统的主流架构模式。随着微服务数量的不断增加,服务之间的通信、配置管理以及服务的高可用性等问题变得愈发复杂。Nacos 作为阿里巴巴开源的一个动态服…...
WinForm真入门(16)——LinkLabel 控件详解
以下是 WinForm 中 LinkLabel 控件的基本概念、核心属性、事件及典型应用案例的总结: 一、基本概念 LinkLabel 是 WinForm 中用于显示超链接文本的控件,继承自 Label,支持单链接或多链接区域。用户点击链接时可触发自定义行为࿰…...
功能丰富的PDF处理免费软件推荐
软件介绍 今天给大家介绍一款超棒的PDF工具箱,它处理PDF文档的能力超强,而且是完全免费使用的,没有任何限制。 TinyTools(PC)这款软件,下载完成后即可直接打开使用。在使用过程中,操作完毕后&a…...
【MySQL高级】事务,存储引擎,索引(一)
Mysql高级 DQL查询语句 反引号 模糊查询避免%出现在开头,会造成索引失效 order by排序先后 表名列名都需要用${},他们不能带’’ 去重统计数量 null的运算 分组函数会自动忽略null,不用对null进行处理 截取子串substr(字段,下标…...
React 之 Redux 第三十二节 Redux 常用API及HOOKS,以及Redux Toolkit核心API使用详解
一、4.X版本中核心 API 和用途 1. createStore(reducer, [preloadedState], [enhancer]) 用途: 创建 Redux Store(数据仓库) 参数: reducer: 状态更新函数 preloadedState: 初始状态(可选) enhancer: 中间件增强器(如…...
react tailwindcss最简单的开始
参考教程: Install Tailwind CSS with Vite - TailwindCSS中文文档 | TailwindCSS中文网https://www.tailwindcss.cn/docs/guides/vite操作过程: Microsoft Windows [版本 10.0.26100.3476] (c) Microsoft Corporation。保留所有权利。D:\gitee\tailwi…...
波束形成(BF)从算法仿真到工程源码实现-第九节-延迟相减波束形成(delay sub)
一、概述 本节对delay sub算法进行仿真。更多资料和代码可以进入https://t.zsxq.com/qgmoN ,同时欢迎大家提出宝贵的建议,以共同探讨学习。 二、代码仿真 import numpy as np import soundfile as sf import scipy import matplotlib.pyplot as pltfft…...
系统假死问题排查
系统假死定义 应用进程存在,但是无法正常提供服务(请求没有响应,或者响应超时)。 系统假死原因 主要分为两大类:连接无法建立、请求无法处理,如下图所示: 系统假死的原因还是比较多的&…...
图像处理有哪些核心技术?技术发展现状如何?
在数字化信息爆炸的时代,文档图像预处理技术正悄然改变着我们处理文字信息的方式。无论是手持拍摄的收据、扫描仪中的身份证,还是工业机器人采集的复杂文档,预处理技术都在背后默默提升着OCR(光学字符识别)系统的性能。…...
解决在linux下运行rust/tauri项目出现窗口有内容,但是渲染出来成纯黑问题
起因 最近折腾了一下rust/tauri程序开发,据说这玩意性能非常牛皮就玩了一下,但是我运行打包一直出现一个奇怪问题,窗口能正常打开,但是是纯黑的什么内容都没有,鼠标移上去又发现指针会变换(看起来是内容又…...
计算机网络:流量控制与可靠传输机制
目录 基本概念 流量控制:别噎着啦! 可靠传输:快递必达服务 传输差错:现实中的意外 滑动窗口 基本概念 换句话说:批量发货排队验收 停止-等待协议 SW(发1份等1份) 超时重传:…...
vue2改变el-message字体、图标尺寸样式(vue2,element-ui)
前言 最近接手一个项目,vue2elementui的,产品觉得message的字体太小了,展示起来看不清,所以需求就是把message的字体和图标变大,实现路径如下: 找到自己的main.scss文件,并且加上对应内容: .e…...
【笔记ing】AI大模型-05单层感知机与多层感知机
单层感知机,是一种最简单的人工神经网络 输入层input layer,输入的样本特征 输出层output layer,输出的预测结果 权值W(w0,w1,w2,...,wn)^T,感知机的权值参数,其中的w0叫做偏置,也称截距,类似…...
分布式热点网络
核心设计理念: 在自然灾害(地震、洪水、台风)、极端环境(无人区)及网络管制(欠费停机)等场景下,传统中心化网络易因核心节点失效导致全局瘫痪。本方案提出构建去中心化设备网络&…...
为 docker 拉取镜像配置代理
为 Docker 配置代理,有 两个层面 的操作:(1) Docker 守护进程(用于拉取镜像等操作),(2) Docker 容器内部(容器内应用的网络流量)。 我们这篇文章着重于前者,以下是详细步骤ÿ…...
人工智能与云计算:技术融合与实践
1. 引言 人工智能(AI)和云计算是当今科技领域最具变革性的两项技术。AI通过模拟人类智能解决问题,而云计算则提供了弹性可扩展的计算资源。两者的结合创造了前所未有的可能性,使企业能够以更低的成本部署复杂的AI解决方案。 本文将探讨AI与云计算的技术融合,包括核心概念、…...
GIT的一些操作
git仓库迁移,包括所有分支和标签 git clone --mirror http://git./test-frontend.git test-frontend 克隆项目到 test-frontend文件夹下,--mirror 表示所有分支和标签 cd test-frontend 切到目录下 git remote add bd http://git./new-frontend.git …...
大模型——Crawl4AI入门指南
大模型——Crawl4AI入门指南 本快速入门指南介绍了Crawl4AI,涵盖了基本用法、先进功能(例如分块和提取策略)以及异步编程。用户将学习如何实现各种爬虫技术,包括截图、JSON提取和动态内容爬取。 1. 什么是Crawl4AI? Crawl4AI 是一个强大的异步网络爬虫库,旨在简化信息…...
48、Spring Boot 详细讲义(五)
3、集成MyBatis 3.1 MyBatis 概述 3.1.1 核心功能和优势 MyBatis 是一个 Java 持久层框架,它通过 XML 或注解配置 SQL 语句,将 Java 方法与 SQL 语句映射起来,消除了大量的 JDBC 代码,简化了数据库操作。MyBatis 的核心功能和优势包括: ORM(对象关系映射):通过 XML …...
设计模式-桥接模式
例如形状和颜色,如果这么设计? 将两个具有紧耦合的设计,使用组合,为桥接模式 客户端的代码: 抽象:形状是抽象; 实现:实现颜色的代码...
3.vtkProp 和vtkProp3D
文章目录 vtkProp 和vtkProp3D使用vtkProp3D使用vtkPro vtkProp 和vtkProp3D vtkProp 和 vtkProp3D 都是VTK(Visualization Toolkit)库中的类,它们用于在渲染场景中表示可视化元素。理解这两个类的区别和用途对于有效地使用VTK进行三维数据可…...
大模型之Transformers , PyTorch和Keras
Transformers、PyTorch 和 Keras 的对比 特性TransformersPyTorchKeras主要应用自然语言处理(NLP)任务计算机视觉、NLP、强化学习等快速原型设计和深度学习模型构建架构基于 Transformer 模型,强大的自注意力机制动态计算图,灵活的模型构建和调试高层次 API,简化模型开发,…...
云原生(Cloud Native)的详解、开发流程及同类软件对比
以下是云原生(Cloud Native)的详解、开发流程及同类软件对比: 一、云原生核心概念 定义: 云原生(Cloud Native)是基于云环境设计和运行应用程序的方法论,强调利用云平台的弹性、分布式和自动化…...
从文本到视频:基于扩散模型的AI生成系统全解析(附PyTorch实现)
当语言遇见动态视觉 "用文字生成电影场景"曾是科幻作品中的幻想,如今借助扩散模型(Diffusion Models)正逐步成为现实。本文将手把手带你实现一个创新的文本到视频生成系统,通过深度解析扩散模型原理,结合独…...
ES6学习04-数组扩展:扩展运算符、新增方法
一、扩展运算符 1. 2. eg: 3. 二、新增方法 1. arguments 元素组合 类似数组对象 2....
TiDB 部署指南(单机模式) CentOS 7 安装 MariaDB 教程
文章目录 TiDB 部署指南(单机模式)& CentOS 7 安装 MariaDB 教程简介TiDB 关键特性TiDB 单机部署步骤下载 TiDB 安装包校验文件完整性解压并进入目录启动 PD 服务启动 TiKV 服务启动 TiDB 服务使用 MySQL 客户端连接 TiDB CentOS 7 安装 MariaDB&…...
C++23 新特性:auto(x) 和 auto{x} 的衰变复制
文章目录 一、什么是衰变复制二、为什么引入衰变复制三、auto(x) 和 auto{x} 的区别四、使用场景1. 模板编程中的副本创建2. 避免引用失效3. 并发编程中的线程构造 五、性能考虑六、总结 在 C23 中, auto(x) 和 auto{x} 的引入为语言带来了新的便利性和灵活性。这…...
人工智能驱动的科研新范式及学科应用研究
人工智能(AI)驱动的科研新范式通过数据、算力、算法的深度耦合深度嵌入科学研究的全过程,引发科研流程、思考逻辑和组织模式的深刻变革。文章系统总结了AI驱动科研新范式的主要特征与形式,提出AI驱动科研新范式的演化方向由“科研…...
2025.04.14【Animation】| 动画式生信数据可视化
Cheatsheet base R A cheatsheet to remember a few chart parameters. 文章目录 Cheatsheet base R 动画式生信数据可视化:R语言中的动态图表详解1. R语言和数据可视化基础2. R中的ggplot2包3. R中的dplyr包4. R中的颜色和形状5. R中的动画包gganimate6. 生物信息…...
Kotlin作用域函数
在 Kotlin 中,.apply 是一个 作用域函数(Scope Function),它允许你在一个对象的上下文中执行代码块,并返回该对象本身。它的设计目的是为了 对象初始化 或 链式调用 时保持代码的简洁性和可读性。 // 不使用 apply va…...
SCP-Firmware安全通告:CVE-2024-11863和CVE-2024-11864
安全之安全(security)博客目录导读 目录 一、概述 二、CVE详情 三、受影响产品 四、修复建议 五、致谢 六、版本历史 一、概述 在SCP固件(SCP-Firmware)中发现两处安全漏洞,可能允许普通世界特权软件(normal world privileged softwareÿ…...
报错:Nlopt
报错:Nlopt CMake Error at TGH-Planner/fast_planner/bspline_opt/CMakeLists.txt:20 (find_package):By not providing "FindNLopt.cmake" in CMAKE_MODULE_PATH this project hasasked CMake to find a package configuration file provided by "…...
软考高级系统架构设计师-第12章 系统质量属性与架构评估
【本章学习建议】 根据考试大纲,本章不仅考查系统架构设计师单选题,预计考11分左右,而且案例分析和论文写作也是必考,对应第二版教材第8章,属于重点学习的章节。 12.1 软件系统质量属性 12.1.1 质量属性概念 软件系…...
RockyLinux9 部署 Zabbix7 完整步骤
一、Zabbix介绍 Zabbix 是企业级开源监控解决方案,支持实时监控数台服务器,虚拟机和网络设备,开源免费,官方手册 https://www.zabbix.com/documentation/7.0/zh/manual 二、RockyLinux9部署Zabbix 1、进入到相对的系统下&#…...
「小推桌面官方下载」小推桌面TV版-安卓电视版官方免费下载新版
下面小编将给大家详细介绍小推桌面免费下载新版 1. 查找官网:通过搜索引擎查找小推桌面的官方网站。注意要确保进入的是官方正规网站,避免从不可信的来源下载应用,以防安全风险。 2. 下载安装包:在官网中找到适合安卓电视版的小…...
Java多线程学习指南
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Java多线程学习指南**一、入门基础**1. **线…...
HTTPS实现安全的关键方法及技术细节
HTTPS(HyperText Transfer Protocol Secure)通过多种技术手段实现数据传输的安全性,其核心机制基于SSL/TLS协议,并结合数字证书、加密算法等技术。 SSL:Secure Sockets Layer,安全套接字层 TLS:…...
记录:安装 Docker Desktop 时直接设置安装路径及容器存储路径
近期学用 deepseek 本地知识库的构建,准备尝试几个不同的 RAG 工具,结果基本都需要 Docker 支持,故又重新拾起 Docker 来安装,刚好看到个不用目录链接就可以直接设置安装路径的方法,就记录一下,以免以后忘…...
日志分析-mysql应急响应
日志分析-mysql应急响应 任务: 1.黑客第一次写入的shell flag{关键字符串} 2.黑客反弹shell的ip flag{ip} 3.黑客提权文件的完整路径 md5 flag{md5} 注 /xxx/xxx/xxx/xxx/xxx.xx 4.黑客获取的权限 flag{whoami后的值} 黑客第一次写入的shell flag{关键字符串} …...
【C++ 】智能指针:内存管理的 “自动导航仪”
目录 一、引入 二、智能指针的两大特性: 1、RAII 特点: 好处: 2、行为像指针 三、智能指针起初的缺陷:拷贝问题 四、几种智能指针的介绍。 1、C98出现的智能指针——auto_ptr auto_ptr解决上述拷贝构造的问题:…...
macOS 上使用 Homebrew 安装和配置 frp 客户端
macOS 上使用 Homebrew 安装和配置 frp 客户端 (frpc) 指南 frp (Fast Reverse Proxy) 是一款高性能的反向代理应用,常用于内网穿透。本文将介绍在 macOS 上使用 Homebrew 安装 frpc,并进行配置和管理。 一、安装 frpc 使用 Homebrew 安装(…...
OSI参考模型
1.1 OSI参考模型 OSI(Open System Interconnection,开放式系统互联),由ISO(International Organization for Standardization,国际标准化组织)收录在ISO 7489标准中并于1984年发布。OSI参考模…...
《探秘鸿蒙分布式软总线:开启无感发现与零等待传输新时代》
在数字化浪潮中,设备之间的互联互通成为构建智能生态的关键。鸿蒙系统中的分布式软总线技术,宛如一座桥梁,让各种智能设备紧密相连。尤其是其实现的设备间无感发现和零等待传输功能,更是为用户带来了前所未有的便捷体验࿰…...