R语言实战第5章(1)

news2025/5/13 20:31:29
第一部分:数学、统计和字符处理函数
  • 数学和统计函数:R提供了丰富的数学和统计函数,用于执行各种计算和分析。这些函数可以帮助用户快速完成复杂的数学运算、统计分析等任务,例如计算均值、方差、相关系数、进行假设检验等。
  • 字符处理函数:R也提供了多种字符处理函数,用于操作和处理字符串数据。这些函数可以用于字符串的拼接、分割、替换、查找等操作,对于文本数据的处理非常有用。
第二部分:循环和条件执行以及自编函数
  • 循环和条件执行:这部分将讲解如何使用循环(如forwhile)和条件语句(如ifelse)来控制程序的流程。这些控制结构是编程中非常重要的部分,可以帮助用户实现复杂的逻辑和重复的操作。
  • 自编函数:用户可以自己编写函数来完成特定的数据处理和分析任务。这部分将介绍如何定义函数、设置函数的参数、返回值等,并且讲解如何在实际的数据处理中调用这些自编函数。
第三部分:数据整合与重塑
  • 数据整合与概述:这部分将介绍如何对数据进行整合和概述。整合数据时,可以使用内建函数或自编函数来获取数据的统计信息、汇总信息等,从而对数据有一个全面的了解。
  • 数据集的重塑和重构:数据集的重塑和重构是指将数据从一种格式转换为另一种格式,以满足不同的分析需求。例如,将宽格式的数据转换为长格式,或者将数据进行分组、合并等操作。

5.1 一个数据处理难题

问题背景

假设有一组学生参加了数学、科学和英语三门课程的考试。现在需要完成以下任务:

  1. 组合成绩:将三门课程的成绩组合成一个单一的成绩衡量指标。
  2. 评定等级:根据组合后的成绩,将学生分为不同的等级(A、B、C、D、E),每个等级包含20%的学生。
  3. 排序:按字母顺序对学生进行排序。
数据示例

表5-1展示了部分学生的成绩数据:

学生姓名数学科学英语
John Davis5029525
Angela Williams6009922
Bullwinkle Moose4128018
David Jones3588215
Janice Markhammer4957520
Cheryl Cushing5128528
Reuven Ytzrhak4108015
Greg Knox6259530
Joel England5738927
Mary Rayburn5228618
面临的挑战
  1. 成绩不可比

    • 三门课程的成绩范围和分布不同(例如数学成绩可能在几百分,而科学和英语成绩可能在0-100分之间)。
    • 直接对这些成绩求平均是没有意义的,需要将它们转换为可比较的单位(例如标准化或归一化)。
  2. 评定等级

    • 需要一种方法来确定每个学生在组合成绩中的百分比排名。
    • 根据百分比排名将学生分为不同的等级(A、B、C、D、E),每个等级包含20%的学生。
  3. 排序问题

    • 学生姓名是一个整体字段,包含姓和名。
    • 为了按字母顺序排序,需要将姓和名拆开,分别处理。

解决方案的思路

这段内容的核心是通过R语言中的数值和字符处理函数来解决上述问题。具体步骤可能包括:

  1. 标准化或归一化成绩
    • 使用数学函数(如scale())将不同范围的成绩转换为可比较的单位。
  2. 计算百分比排名
    • 使用统计函数(如rank()ecdf())计算每个学生的百分比排名。
  3. 评定等级
    • 根据百分比排名将学生分为不同的等级。
  4. 拆分姓名字段
    • 使用字符处理函数(如strsplit())将学生姓名拆分为姓和名。
  5. 排序
    • 使用排序函数(如order())对学生进行排序。

5.2 数值和字符处理函数

5.2.1 数学函数

R提供了丰富的数学函数,这些函数可以用于执行各种数学运算和变换。以下是一些常用的数学函数及其描述:

函数描述用例
abs(x)绝对值abs(-4)返回值为4
sqrt(x)平方根sqrt(25)返回值为5,和25^(0.5)等价
ceiling(x)不小于x的最小整数ceiling(3.475)返回值为4
floor(x)不大于x的最大整数floor(3.475)返回值为3
trunc(x)向0的方向截取的x中的整数部分trunc(5.99)返回值为5
round(x, digits=n)将x舍入为指定位的小数round(3.475, digits=2)返回值为3.48
signif(x, digits=n)将x舍入为指定的有效数字位数signif(3.475, digits=2)返回值为3.5
cos(x)、sin(x)、tan(x)余弦、正弦和正切cos(2)返回值为–0.416
acos(x)、asin(x)、atan(x)反余弦、反正弦和反正切acos(-0.416)返回值为2
cosh(x)、sinh(x)、tanh(x)双曲余弦、双曲正弦和双曲正切sinh(2)返回值为3.627
acosh(x)、asinh(x)、atanh(x)反双曲余弦、反双曲正弦和反双曲正切asinh(3.627)返回值为2
log(x, base=n)对x取以n为底的对数log(10)返回值为2.3026
log10(x)对x取以10为底的对数log10(10)返回值为1
exp(x)指数函数exp(2.3026)返回值为10
数据变换

数学函数的一个主要用途是对数据进行变换。例如,对于存在明显偏倚的变量(如收入),在进一步分析之前取对数是一种常见的做法。数学函数也常用于公式中,用于绘图函数(例如xsin(x))和在输出结果之前对数值进行格式化。

5.2.2 统计函数

统计函数概述

R提供了丰富的统计函数,用于计算各种描述性统计量。这些函数不仅可以直接应用于数值向量,还可以通过参数调整来满足不同的需求。以下是一些常用的统计函数及其描述:

函数描述用例
mean(x)平均数mean(c(1,2,3,4))返回值为2.5
median(x)中位数median(c(1,2,3,4))返回值为2.5
sd(x)标准差sd(c(1,2,3,4))返回值为1.29
var(x)方差var(c(1,2,3,4))返回值为1.67
mad(x)绝对中位差(median absolute deviation)mad(c(1,2,3,4))返回值为1.48
quantile(x, probs)求分位数quantile(x, c(0.3, 0.84))返回x的30%和84%分位点
range(x)求值域range(c(1,2,3,4))返回值为c(1,4)
diff(range(x))求值域的差diff(range(c(1,2,3,4)))返回值为3
sum(x)求和sum(c(1,2,3,4))返回值为10
diff(x, lag=n)滞后差分diff(c(1,5,23,29))返回值为c(4,18,6)
min(x)求最小值min(c(1,2,3,4))返回值为1
max(x)求最大值max(c(1,2,3,4))返回值为4
scale(x, center=TRUE, scale=TRUE)中心化或标准化代码清单5-6中给出了示例
参数的灵活使用

许多统计函数提供了可选参数,这些参数可以显著影响输出结果。例如:

y <- mean(x)  # 计算x的算术平均数
z <- mean(x, trim = 0.05, na.rm = TRUE)  # 计算截尾平均数,丢弃最大5%和最小5%的数据,并忽略缺失值
  • trim参数用于计算截尾平均数,可以去除极端值的影响。
  • na.rm参数用于处理缺失值,设置为TRUE时会忽略缺失值。
代码示例:均值和标准差的计算

代码清单5-1展示了如何计算某个数值向量的均值和标准差的两种方式。

x <- c(1,2,3,4,5,6,7,8)
mean(x)  # 使用R内置函数计算均值
[1] 4.5
sd(x)  # 使用R内置函数计算标准差
[1] 2.449490

# 手动计算均值和标准差
n <- length(x)  # 获取向量长度
meanx <- sum(x) / n  # 计算均值
css <- sum((x - meanx)^2)  # 计算修正平方和
sdx <- sqrt(css / (n - 1))  # 计算标准差
meanx  # 手动计算的均值
[1] 4.5
sdx  # 手动计算的标准差
[1] 2.449490
修正平方和的计算过程

在手动计算标准差的过程中,修正平方和(css)的计算步骤如下:

  1. 计算向量x的平均值meanx
  2. x的每个元素中减去meanx,得到偏差向量。
  3. 对偏差向量的每个元素求平方,得到平方偏差向量。
  4. 对平方偏差向量的所有元素求和,得到修正平方和css

数据的标准化

数据标准化是数据预处理中的一个重要步骤,它有助于改善分析结果的质量和可靠性。在R中,scale()函数提供了一种方便的方式来对数据进行标准化处理。

默认标准化

默认情况下,scale()函数对矩阵或数据框的指定列进行标准化,使得每列的均值为0,标准差为1。这在很多统计分析和机器学习算法中非常有用,因为它们通常假设数据是标准化的。

newdata <- scale(mydata)
  • mydata:输入的矩阵或数据框。
  • newdata:标准化后的数据。
自定义均值和标准差

如果你希望对每一列进行任意均值和标准差的标准化,可以使用以下代码:

newdata <- scale(mydata) * SD + M
  • M:目标均值。
  • SD:目标标准差。

这种标准化方式允许你将数据转换为具有特定均值和标准差的新分布。例如,你可能希望将数据标准化为均值为50,标准差为10的分布:

newdata <- scale(mydata) * 10 + 50
指定列的标准化

如果你只想对数据框中的某一列进行标准化,可以使用transform()函数。例如,将变量myvar标准化为均值为50,标准差为10的变量:

newdata <- transform(mydata, myvar = scale(myvar) * 10 + 50)
  • mydata:原始数据框。
  • myvar:需要标准化的列名。
  • newdata:新的数据框,其中myvar列已被标准化。
注意事项
  • 在非数值型的列上使用scale()函数将会报错。因此,在应用scale()之前,需要确保数据中不包含非数值型列,或者先将这些列从数据中分离或转换。
  • 数据标准化是许多数据分析和机器学习任务的前提,它有助于提高模型的性能和稳定性。
总结

scale()函数是R中进行数据标准化的强大工具。通过它可以轻松地将数据标准化为均值为0、标准差为1的格式,也可以通过简单的数学变换调整为目标均值和标准差。此外,transform()函数可以方便地对数据框中的指定列进行标准化处理。这些技巧在数据预处理阶段非常有用,尤其是在处理具有不同量纲和分布的数据时。

5.2.3 概率函数

概率函数概述

概率函数在统计学中扮演着重要角色,它们不仅用于生成模拟数据,还用于计算概率值。在R中,概率函数通常遵循特定的命名规则,以便于理解和使用。

命名规则

R中的概率函数命名规则如下:

  • d:密度函数(density)
  • p:分布函数(distribution function),通常也称为累积分布函数(CDF)
  • q:分位数函数(quantile function),用于找到给定概率值对应的分位点
  • r:生成随机数(random deviates)
常用概率函数

表5-4列出了R中常用的一些概率分布及其缩写:

分布名称缩写
Beta 分布beta
二项分布binom
柯西分布cauchy
卡方分布chisq
指数分布exp
F 分布f
Gamma 分布gamma
几何分布geom
正态分布norm
泊松分布pois
t 分布t
均匀分布unif
Weibull 分布weibull
正态分布函数

表5-5展示了正态分布的四个基本函数及其用法示例:

问题解法
在区间[–3, 3]上绘制标准正态曲线使用dnorm函数计算密度,然后使用plot绘制曲线
位于z=1.96左侧的标准正态曲线下方面积是多少?使用pnorm(1.96)计算累积概率,结果为0.975
均值为500,标准差为100的正态分布的0.9分位点值为多少?使用qnorm(.9, mean=500, sd=100)计算分位点,结果为628.16
生成50个均值为50,标准差为10的正态随机数使用rnorm(50, mean=50, sd=10)生成随机数
设置随机数种子

为了确保结果的可重现性,可以使用set.seed()函数设置随机数种子。这样,每次生成的随机数序列将是相同的。

生成多元正态数据

在模拟研究和蒙特卡洛方法中,经常需要从多元正态分布中抽取数据。MASS包中的mvrnorm()函数可以方便地实现这一需求。其调用格式为:

mvrnorm(n, mean, sigma)

其中:

  • n:样本大小
  • mean:均值向量
  • sigma:方差-协方差矩阵
示例:生成多元正态数据

代码清单5-3展示了如何从一个三元正态分布中抽取500个观测:

library(MASS)
options(digits=3)
set.seed(1234)
mean <- c(230.7, 146.7, 3.6)
sigma <- matrix(c(15360.8, 6721.2, -47.1,
                  6721.2, 4700.9, -16.5,
                  -47.1, -16.5, 0.3), nrow=3, ncol=3)
mydata <- mvrnorm(500, mean, sigma)
mydata <- as.data.frame(mydata)
names(mydata) <- c("y","x1","x2")
dim(mydata)
head(mydata, n=10)
  • 设置随机数种子以确保结果可重现。
  • 指定均值向量和方差-协方差矩阵。
  • 生成500个伪随机观测。
  • 将结果从矩阵转换为数据框,并为变量指定名称。
  • 确认数据框的维度,并输出前10个观测。

5.2.4 字符处理函数

字符处理函数概述

字符处理函数在R中用于处理文本型数据,它们可以帮助用户从文本中提取信息或重新设置文本格式。这些函数对于数据清洗、文本分析和报告生成等任务至关重要。

常用字符处理函数

表5-6列出了R中一些最常用的字符处理函数及其描述:

函数描述
nchar(x)计算字符串向量x中每个元素的字符数量
substr(x, start, stop)提取或替换字符串向量x中的子串
grep(pattern, x, ...)在字符串向量x中搜索与模式pattern匹配的元素,并返回匹配元素的下标
sub(pattern, replacement, x, ...)在字符串向量x中搜索模式pattern,并用文本replacement替换
strsplit(x, split, ...)在指定的分隔符split处分割字符串向量x中的元素
paste(..., sep="")连接字符串,sep参数指定连接符
toupper(x)将字符串向量x中的所有字符转换为大写
tolower(x)将字符串向量x中的所有字符转换为小写
正则表达式

正则表达式提供了一种强大的方式来匹配文本模式。例如,正则表达式^[hc]?at可以匹配以0个或1个hc开头,后接at的任意字符串,如hatcatat,但不会匹配bat

示例

以下是一些示例,展示了如何使用这些字符处理函数:

x <- c("ab", "cde", "fghij")
nchar(x[3])  # 返回值为5

x <- "abcdef"
substr(x, 2, 4)  # 返回值为"bcd"
substr(x, 2, 4) <- "22222"  # x 将变成"a222ef"

grep("A", c("b", "A", "c"), fixed=TRUE)  # 返回值为2

sub("\\s", ".", "Hello There")  # 返回值为Hello.There

y <- strsplit("abc", "")  # 返回一个列表,包含"a" "b" "c"
unlist(y)[2]  # 返回"b"

paste("x", 1:3, sep="")  # 返回值为c("x1", "x2", "x3")
paste("x", 1:3, sep="M")  # 返回值为c("xM1", "xM2", "xM3")

toupper("abc")  # 返回值为"ABC"
tolower("ABC")  # 返回值为"abc"

5.2.5 其他实用函数

在R中,除了专门针对数值和字符处理的函数外,还有一些实用函数,它们在数据管理和处理中发挥着重要作用,但不容易归入特定的分类。以下是一些常用的实用函数:

表5-7 其他实用函数
函数描述
length(x)返回对象x的长度(元素数量)
seq(from, to, by)生成一个从fromto,步长为by的序列
rep(x, n)将对象x重复n
cut(x, n)将连续型变量x分割为n个水平的因子,可指定ordered_result创建有序因子
pretty(x, n)创建美观的分割点,将连续型变量x分割为n个区间,常用于绘图
cat(... , file ="myfile", append =FALSE)连接对象并输出到屏幕或文件中,可使用转义字符控制格式
示例

以下是一些示例,展示了如何使用这些实用函数:

x <- c(2, 5, 6, 9)
length(x)  # 返回值为4

indices <- seq(1, 10, 2)  # 生成序列c(1, 3, 5, 7, 9)

y <- rep(1:3, 2)  # 返回值为c(1, 2, 3, 1, 2, 3)

# 将连续型变量x分割为3个水平的因子
cut(x, 3)

# 创建美观的分割点,将连续型变量x分割为3个区间
pretty(x, 3)

firstname <- c("Jane")
cat("Hello", firstname, "\n")  # 输出Hello Jane

name <- "Bob"
cat("Hello", name, "\b.\n", "Isn\'t R", "\t", "GREAT?\n")
# 输出:
# Hello Bob.
# Isn't R    GREAT?
转义字符

cat()函数中,可以使用转义字符来控制输出格式:

  • \n:新行
  • \t:制表符
  • \':单引号
  • \b:退格

例如,在输出时,可以在句号之前使用退格转义字符(\b),以避免在句号后面多出一个空格。

5.2.6 将函数应用于矩阵和数据框

R函数的一个强大特性是它们可以应用于多种数据对象,包括标量、向量、矩阵、数组和数据框。这使得R在数据处理方面非常灵活和强大。

示例:将函数应用于数据对象

代码清单5-4展示了如何将函数应用于不同类型的数据对象:

a <- 5
sqrt(a)  # 返回值为2.236068

b <- c(1.243, 5.654, 2.99)
round(b)  # 返回值为c(1, 6, 3)

c <- matrix(runif(12), nrow=3)
c  # 生成一个3x4的矩阵
log(c)  # 对矩阵c中的每个元素取对数
mean(c)  # 计算矩阵c中所有元素的均值,结果为0.444
应用函数到矩阵和数据框的特定维度

如果你希望对矩阵或数据框的行或列应用函数,可以使用apply()函数。apply()函数的格式如下:

apply(x, MARGIN, FUN, ...)
  • x:数据对象(矩阵、数组或数据框)。
  • MARGIN:维度的下标(在矩阵或数据框中,MARGIN=1表示行,MARGIN=2表示列)。
  • FUN:要应用的函数。
  • ...:传递给FUN的任何参数。
示例:将函数应用到矩阵的所有行和列

代码清单5-5展示了如何将函数应用到矩阵的所有行和列:

mydata <- matrix(rnorm(30), nrow=6)
mydata  # 生成一个6x5的矩阵

apply(mydata, 1, mean)  # 计算每行的均值
apply(mydata, 2, mean)  # 计算每列的均值
apply(mydata, 2, mean, trim=0.2)  # 计算每列的截尾均值(忽略最高和最低20%的数据)
  • 第一个apply()计算了6行的均值。
  • 第二个apply()计算了5列的均值。
  • 第三个apply()计算了每列的截尾均值,基于中间60%的数据,忽略最高和最低20%的值。
总结

apply()函数是一种强大的机制,可以将任意R函数应用到矩阵、数组或数据框的任何维度上。这使得它在数据处理和分析中非常有用。此外,lapply()sapply()函数可以将函数应用到列表上,提供了更多的灵活性。

5.3 数据处理难题的一套解决方案

在5.1节中,我们提出了一个数据处理问题,涉及学生考试成绩的组合、评分和排序。现在,我们将通过代码清单5-6展示解决这一问题的详细步骤。

代码清单5-6 示例的一种解决方案
  1. 设置输出格式

    options(digits=2)
    

    这行代码设置输出的小数点后保留两位,使结果更易读。

  2. 创建学生数据框

    Student <- c("John Davis", "Angela Williams", "Bullwinkle Moose", "David Jones", "Janice Markhammer", "Cheryl Cushing", "Reuven Ytzrhak", "Greg Knox", "Joel England", "Mary Rayburn")
    Math <- c(502, 600, 412, 358, 495, 512, 410, 625, 573, 522)
    Science <- c(95, 99, 80, 82, 75, 85, 80, 95, 89, 86)
    English <- c(25, 22, 18, 15, 20, 28, 15, 30, 27, 18)
    roster <- data.frame(Student, Math, Science, English, stringsAsFactors=FALSE)
    
  3. 标准化考试成绩

    z <- scale(roster[,2:4])
    score <- apply(z, 1, mean)
    roster <- cbind(roster, score)
    

    这里,我们首先使用scale()函数对数学、科学和英语成绩进行标准化,然后计算每个学生的标准化成绩均值,并将这些均值添加到数据框中。

  4. 计算成绩等级

    y <- quantile(score, c(.8,.6,.4,.2))
    roster$grade[score >= y[1]] <- "A"
    roster$grade[score < y[1] & score >= y[2]] <- "B"
    roster$grade[score < y[2] & score >= y[3]] <- "C"
    roster$grade[score < y[3] & score >= y[4]] <- "D"
    roster$grade[score < y[4]] <- "F"
    

    使用quantile()函数计算成绩的分位数,并根据这些分位数将学生成绩分为A到F等级。

  5. 拆分姓名并排序

    name <- strsplit((roster$Student), " ")
    Lastname <- sapply(name, "[", 2)
    Firstname <- sapply(name, "[", 1)
    roster <- cbind(Firstname, Lastname, roster[,-1])
    roster <- roster[order(Lastname, Firstname),]
    

    使用strsplit()函数拆分学生姓名为姓和名,然后使用sapply()提取姓和名,最后按姓和名对数据框进行排序。

总结

这个解决方案展示了如何使用R的基本函数来解决实际的数据处理问题。通过标准化考试成绩、计算成绩等级、拆分和排序姓名,我们能够将原始数据转换为一个结构化、易于理解的格式。这些步骤不仅解决了提出的问题,还展示了R在数据处理方面的强大能力。

这个过程也强调了R中函数的灵活性和实用性,无论是在处理标量、向量、矩阵还是数据框时。通过这些基本的数据处理技术,可以为更复杂的数据分析任务打下坚实的基础。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

neo4j官方示例

目录 一、准备数据 1.执行查看结果 二、操作 1.find 单个节点 2.同上&#xff0c;已某个属性去查询 3. 指定查询个数 4.条件查询 5.查询某个人出演的电影汇总 6.查询tom出演的电影中&#xff0c;还有其他演员的信息。 7.查询跟电影(Cloud Atlas)有关的演员&#xff0…

前端自学入门:HTML 基础详解与学习路线指引

在互联网的浪潮中&#xff0c;前端开发如同构建数字世界的基石&#xff0c;而 HTML 则是前端开发的 “入场券”。对于许多渴望踏入前端领域的初学者而言&#xff0c;HTML 入门是首要挑战。本指南将以清晰易懂的方式&#xff0c;带大家深入了解 HTML 基础&#xff0c;并梳理前端…

vue实现与后台springboot传递数据【传值/取值 Axios 】

vue实现与后台springboot传递数据【传值/取值】 提示&#xff1a;帮帮志会陆续更新非常多的IT技术知识&#xff0c;希望分享的内容对您有用。本章分享的是node.js和vue的使用。前后每一小节的内容是存在的有&#xff1a;学习and理解的关联性。【帮帮志系列文章】&#xff1a;每…

【英语笔记(三)】介绍谓语动词的分类,初步讲解四种基本状态:一般、进行、完成、完成进行

1. 五大类谓语动词 2. 谓语动词分类 3. 动词时间 过去--------------------------现在-----------------------未来 3. 动词状态 3.1 进行状态 3.2 完成状态 3.3 完成进行状态 3.4 一般状态 4. 时间 状态 名称说明例句现在现在现在现在进行时态现在某物正在做什么事情一只…

【Python】让Selenium 像Beautifulsoup一样,用解析HTML 结构的方式提取元素!

我在使用selenium的find_element的方式去获取网页元素&#xff0c;一般通过xpath、css_selector、class_name的方式去获取元素的绝对位置。 但是有时候如果网页多了一些弹窗或者啥之类的&#xff0c;绝对位置会发生变化&#xff0c;使用xpath等方法&#xff0c;需要经常变动。…

2025 后端自学UNIAPP【项目实战:旅游项目】3、API接口请求封装,封装后的简单测试以及实际使用

一、创建请求封装目录 选中自己的项目&#xff0c;右键鼠标---->新建---->目录---->名字自定义【我的是api】 二、创建两个js封装文件 选中封装的目录&#xff0c;右键鼠标---->新建---->js文件---->名字自定义【我的两个js文件分别是my_http和my_api】 三…

Ascend的aclgraph(二)_npu_backend中还有些什么秘密?

1 _npu_backend 文章还是从代码开始 import torch_npu, torchair config torchair.CompilerConfig() # 设置图下沉执行模式 config.mode "reduce-overhead" npu_backend torchair.get_npu_backend(compiler_configconfig) opt_model torch.compile(model, back…

ventoy安全启动怎么选_ventoy安全启动支持是开还是关

ventoy安全启动怎么选&#xff1f;Ventoy新一代多系统启动U盘解决方案。国产开源U盘启动制作工具&#xff0c;支持Legacy BIOS和UEFI模式&#xff0c;理论上几乎支持任何ISO镜像文件&#xff0c;支持加载多个不同类型的ISO文件启动&#xff0c;无需反复地格式化U盘&#xff0c;…

CC53.【C++ Cont】二分查找的普通模版

目录 1.知识回顾 2.关键点 特点 三个模版 普通的模版(有局限) 以LeetCode上的一道题为例:704. 二分查找 分析 引入二段性:分两段,舍一段,操作另一段(这个是二分查找的本质!) 代码 提交结果 当然也可以使用随机数来分两段 普通模版总结 1.知识回顾 之前在C语言专栏…

【优选算法 | 链表】链表操作技巧:常见算法

算法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;双指针滑动窗口二分查找前缀和位运算模拟 链表是一种灵活的数据结构&#xff0c;广泛用于需要频繁插入和删除的场景。掌握链表的常见操作技巧&#xff0c;如插入、删除、翻转和合并等&#xff0c;能帮助开发者更…

w~大模型~合集30

我自己的原文哦~ https://blog.51cto.com/whaosoft/13284996 #VideoMamba 视频理解因大量时空冗余和复杂时空依赖&#xff0c;同时克服两个问题难度巨大&#xff0c;CNN 和 Transformer 及 Uniformer 都难以胜任&#xff0c;Mamba 是个好思路&#xff0c;让我们看看本文是…

PBR材质-Unity/Blender/UE

目录 前言&#xff1a; 一、Unity&#xff1a; 二、Blender&#xff1a; 三、UE&#xff1a; 四、全家福&#xff1a; 五、后记&#xff1a; 前言&#xff1a; PBR流程作为表达物理效果的经典方式&#xff0c;很值得一学。纹理贴图使用的是上一期的Textures | cgbookcas…

websocketpp 安装及使用

介绍 WebSocket 是从 HTML5 开始支持的一种网页端和服务端保持长连接的消息推送机制。 传统的 web 程序都是属于 "一问一答" 的形式&#xff0c;即客户端给服务器发送了一个 HTTP 请求&#xff0c;服务器给客户端返回一个 HTTP 响应。这种情况下服务器是属于被动…

第8章-2 查询执行的基础

上一篇&#xff1a;《第8章-1 查询性能优化-优化数据访问》&#xff0c;接着来了解查询执行的过程&#xff0c;这个对sql执行有个更直观的了解。 查询执行的基础 当希望MySQL能够以更高的性能运行查询时&#xff0c;最好的办法就是弄清楚MySQL是如何优化和执行查询的。一旦理解…

java面试OOM汇总

在正式 Minor GC 前&#xff0c;JVM 会先检查新生代中对象&#xff0c;是比老年代中剩余空间大还是小。假如 Minor GC之后 Survivor 区放不下剩余对象&#xff0c;这些对象就要进入老年代 老年代剩余空间大于新生代中的对象大小&#xff0c;那就直接 Minor GC&#xff0c; GC 完…

react-diff-viewer 如何实现语法高亮

前言 react-diff-viewer 是一个很好的 diff 展示库&#xff0c;但是也有一些坑点和不完善的地方&#xff0c;本文旨在描述如何在这个库中实现自定义语法高亮。 Syntax highlighting is a bit tricky when combined with diff. Here, React Diff Viewer provides a simple rend…

自定义prometheus exporter实现监控阿里云RDS

# 自定义 Prometheus Exporter 实现多 RDS 数据采集## 背景1. Prometheus 官网提供的 MySQL Exporter 对于 MySQL 实例只能一个进程监控一个实例&#xff0c;数据库实例很多的情况下&#xff0c;不方便管理。 2. 内部有定制化监控需求&#xff0c;RDS 默认无法实现&#xff0c;…

【计算机网络】--tcp三次握手

文章目录 示意图&#xff1a;抓包结果&#xff1a;第一次握手&#xff08;Client → Server&#xff09;第二次握手&#xff08;Server → Client&#xff09;第三次握手&#xff08;Client → Server&#xff09;为什么是三次握手 不是两次或者四次 示意图&#xff1a; 抓包结…

UI-TARS: 基于视觉语言模型的多模式代理

GitHub&#xff1a;https://github.com/bytedance/UI-TARS 更多AI开源软件&#xff1a;发现分享好用的AI工具、AI开源软件、AI模型、AI变现 - 小众AI 基于视觉语言模型&#xff08;Vision-Language Model&#xff09;的 GUI 代理应用&#xff0c;允许用户通过自然语言控制电脑操…

Spark SQL 运行架构详解(专业解释+番茄炒蛋例子解读)

1. 整体架构概览 Spark SQL的运行过程可以想象成一个"SQL查询的加工流水线"&#xff0c;从原始SQL语句开始&#xff0c;经过多个阶段的处理和优化&#xff0c;最终变成分布式计算任务执行。主要流程如下&#xff1a; SQL Query → 解析 → 逻辑计划 → 优化 → 物理…