基于R语言的统计分析基础:数据结构

news2024/11/14 15:25:19

R语言是一种用于统计分析和图形表示的编程语言和软件环境,它提供了多种数据结构以存储和操作数据。这些数据结构包括向量、矩阵、数组、数据框、列表、因子、Tibble、环境、公式、调用以及表达式。

向量(Vector)

向量是R中最基本的数据结构,是用于存储相同类型数据元素的一维数组。向量可以使可以是数值型、字符型或逻辑型等,但是同一向量无法混杂不同类型或模式的数据

# 数值型向量
a <- c(1,2,3,4,5)
# 字符型向量
b <- c("猪猪侠","菲菲猪","超人强")
# 逻辑型向量
c <- c(TRUE, FALSE, FALSE)

# 只包含一个元素的向量叫做 标量(scalar)
d <- 1 # 数值型标量
f <- "GGBond"  # 字符型标量
g <- TRUE  # 逻辑型标量

在RStudio的环境窗口中可以清楚地看到这些向量和它们的类型
在这里插入图片描述

矩阵(Matrix)

矩阵是二维的矩形数据集,其中每个元素都具有相同的数据类型。矩阵在R中可以使用matrix()函数创建,用于存储和操作数学矩阵。
以下代码是matrix()函数的最基础用法,在函数中1:20表示创建从1~20的向量,nrow = 5表示矩阵为5行,ncol = 4表示矩阵为4列:

my_matrix <- matrix(1:20, nrow = 5, ncol = 4)

在这里插入图片描述
在R语言中也可以使用向量来组成矩阵,在以下代码中byrow = FALSE参数指定了矩阵的填充方式。当byrow = FALSE时,矩阵将按列填充,即先填充第一列,然后是第二列,如果设置为byrow = TRUE,则矩阵将按行填充。
dimnames = list(rnames, cnames)参数用于给矩阵的行和列命名。rnames向量作为行名;cnames向量作为列名。这两个向量被组合成一个列表,成为dimnames的参数值。

cells <- c(1, 3, 5, 7)
rnames <- c("r1", "r2")
cnames <- c("c1", "c2")
my_matrix2 <- matrix(cells, nrow = 2, ncol = 2,
                        byrow = TRUE, dimnames = list(rnames, cnames))
my_matrix3 <- matrix(cells, nrow = 2, ncol = 2,
                        byrow = FALSE, dimnames = list(rnames, cnames))

在这里插入图片描述
如果是在RStudio中查看矩阵,可以使用View()函数,RStudio会弹出数据框显示矩阵
在这里插入图片描述
查看或修改矩阵中参数也很方便,比如查询矩阵第二行第三列的数值,随后将数值更改为12:
在这里插入图片描述

R语言中的矩阵操作方法表格如下:

矩阵操作方法描述
matrix(data, nrow, ncol)使用数据创建一个矩阵,data是矩阵中的元素,nrow是行数,ncol是列数
dim(matrix)返回矩阵的维度,即行数和列数
matrix[i, j]访问矩阵中第i行第j列的元素
matrix[i, ]访问矩阵中的第i
matrix[, j]访问矩阵中的第j
matrix[i, j] <- value将矩阵中第i行第j列的元素修改为value
rowSums(matrix)计算矩阵的每一行的和
colSums(matrix)计算矩阵的每一列的和
rowMeans(matrix)计算矩阵的每一行的均值
colMeans(matrix)计算矩阵的每一列的均值
rbind(matrix1, matrix2)按行合并矩阵
cbind(matrix1, matrix2)按列合并矩阵
t(matrix)返回矩阵的转置
%*%矩阵乘法
+-*/矩阵的加、减、乘(元素乘法)、除运算
solve(matrix)计算矩阵的逆
det(matrix)计算矩阵的行列式
eigen(matrix)计算矩阵的特征值和特征向量

数组(Array)

在R语言中可以存储多维数据,每个元素具有相同的数据类型。数组可以是二维矩阵,也可以是更高维度的,数组可以使用array()函数创建数组。
以下代码创建了一个从1~9,三行三列的二维数组:

my_array <- array(1:9, dim = c(3, 3))

在这里插入图片描述
以下代码为建立从1~24,三行四列的3维数组:

my_3d_array <- array(1:24, dim = c(3, 4, 2))

在这里插入图片描述
R语言中的数组操作方法表格如下:

序号操作方法描述
1matrix()创建矩阵,通过指定数据、行数、列数等参数来生成矩阵
2dim()设置或获取矩阵的维数(行数和列数)
3nrow()获取矩阵的行数
4ncol()获取矩阵的列数
5[行索引, 列索引]访问矩阵中特定位置的元素或子集
6+, -, *, /对矩阵进行基本的算术运算(加、减、乘、除),注意矩阵乘法使用%*%
7%*%矩阵乘法,要求左侧矩阵的列数等于右侧矩阵的行数
8t()矩阵转置,将矩阵的行和列互换
9det()计算方阵的行列式值
10solve()求解方阵的逆矩阵
11eigen()计算矩阵的特征值和特征向量
12colSums()计算矩阵每列的和
13rowSums()计算矩阵每行的和
14colMeans()计算矩阵每列的均值
15rowMeans()计算矩阵每行的均值
16diag()提取矩阵的对角线元素或生成对角矩阵/单位矩阵
17lower.tri()upper.tri()分别用于提取矩阵的下三角和上三角部分
18cbind()按列合并矩阵或向量
19rbind()按行合并矩阵或向量
20as.matrix()将数据框(data.frame)或其他类型的数据转换为矩阵

数据框(Data Frame)

数据框 用于存储表格型数据,其中每列可以包含不同类型的数据(数值、字符、逻辑等),数据框通常使用data.frame()函数创建。
以下代码创建了一个GGBond年龄、姓名、性别数据框:

df <- data.frame(  
     id = 1:5,  
     name = c("小猪猪", "菲菲", "迷糊老师", "小呆呆", "超人强"),  
     age = c(15, 13, 55, 30, 14),  
     gender = c("Male", "Female", "Male", "Male", "Male")  
 ) 

可以使用str()函数查看数据框

> str(df) 
'data.frame':	5 obs. of  4 variables:
 $ id    : int  1 2 3 4 5
 $ name  : chr  "小猪猪" "菲菲" "迷糊老师" "小呆呆" ...
 $ age   : num  15 13 55 30 14
 $ gender: chr  "Male" "Female" "Male" "Male" ...

使用$符号可以访问并操作数据框中的列

> print(df$name)
[1] "小猪猪"   "菲菲"     "迷糊老师" "小呆呆"   "超人强"  
> df$score <- c(85, 90, 88, 95, 92)  # 添加一列名为 score 的列
> df$score <- NULL # 删除一列名为 score 的列

R语言中的数据框操作方法表格如下:

序号操作方法描述
1data.frame()创建数据框,可以将向量、列表等数据结构转换为数据框
2str()查看数据框的结构,包括变量名称、类型、长度等
3head()tail()查看数据框的前几行或后几行数据
4$ 符号 或 [] 运算符访问数据框的列或行
5$ 符号 或 [] 运算符添加新的列到数据框中
6rbind()cbind()添加新的行到数据框中,rbind()用于按行合并,cbind()用于按列合并
7[] 运算符选择数据框的子集,可以使用逻辑运算符或条件语句进行筛选
8merge()dplyr::join()将两个数据框按照某一列或条件进行合并
9split()根据数据框中选定列的不同取值将数据框拆分为多个子数据框
10as.data.frame()将其他数据结构(如列表、矩阵)转换为数据框
11order()dplyr::arrange()对数据框进行排序,order()返回排序后的索引,arrange()直接返回排序后的数据框
12summary()mean()sd()对数据框进行统计分析,如计算摘要统计信息、均值、标准差等
13names()查看或修改数据框的列名
14subset()根据条件选择数据框的子集
15transform()within()dplyr::mutate()在数据框中添加或修改列,这些函数提供了不同的方式来处理新列的计算
16is.na()na.omit()检查数据框中的缺失值,并移除含有缺失值的观测
17apply() 系列函数对数据框中的数据进行批量处理,如计算列的均值、中位数等
18reshape2::melt()reshape2::dcast()重塑数据框,从宽格式转换为长格式或从长格式转换为宽格式
19dplyr 包中的管道操作使用 %>% 符号进行数据框的管道操作,结合 select()filter()summarise() 等函数进行高效的数据处理

列表(List)

在R语言中列表(List)是一种复杂的数据结构。列表是一种递归的数据结构,可以包含不同类型的元素,如数值、字符串、向量、矩阵、数据框,甚至其他列表,列表允许用户组合多个对象,并对其进行操作。
以下代码使用list()函数创建了一个GGBoy的成绩表

student <- list(  
     name = "GGBoy",  
     age = 15,  
     courses = c("Math", "Stats", "Computer"),  
     grades = c(9, 12, 3),  
     gender = "Male"  
) 

在这里插入图片描述
添加新的元素到列表中 :

student$major <- "Data Science" 

在这里插入图片描述
使用lapply()函数对列表中的每个元素应用函数计算每个元素的长度

lapply_result <- lapply(student_info, length)  
print(lapply_result)  

输出如下:

$name
[1] 1

$age
[1] 1

$courses
[1] 3

$grades
[1] 3

$gender
[1] 1

$major
[1] 1

R语言中的列表操作方法表格如下:

序号操作方法描述
1list()创建列表,可以包含不同类型和长度的对象
2str()查看列表的结构,包括列表内对象的名称和类型
3$ 符号通过列表元素的名称访问元素
4[[ ]] 符号通过索引(可以是数字或名称)访问列表元素的内容,返回元素本身类型
5[ ] 符号通过索引访问列表元素,返回的是列表的子列表
6names()查看或修改列表元素的名称
7length()获取列表的元素个数
8赋值操作修改列表元素的值,或向列表中添加新元素
9NULL 赋值通过将列表元素赋值为NULL来删除元素
10c() 函数可以用于合并多个列表,但请注意,这会扁平化列表(即不会保留原列表的结构)
11lapply(), sapply(), vapply()对列表中的每个元素应用函数,lapply()返回列表,sapply()vapply()尝试简化输出
12unlist()将列表中的元素转换为一个向量,可选地保留元素名称作为向量元素的名称
13recursive = FALSE 参数在使用unlist()时,通过设置recursive = FALSE参数来避免递归展开列表中的列表
14list.files(), dir()虽然不直接操作列表,但这些函数常用于获取文件名列表,随后这些列表可用于文件路径等列表操作

因子(Factor)

因子用于表示分类数据,因子在统计建模和图形表示中非常有用,因为可以表示具有有限数量可能值的变量,在语言中使用factor()函数对数据进行因子化。

my_factor <- factor(c("北京", "上海", "天津", "北京", "上海")) 

在查看因子结构时即可看到 “北京”, “上海”, “天津” 被进行了因子化变成了 1, 2, 3

# 查看因子结构  
str(gender_factor)  
# 查看因子的水平  
levels(gender_factor)  

在这里插入图片描述
R语言中的因子操作方法表格如下:

方法/函数描述
factor()创建因子。基本语法为factor(x, levels = NULL, labels = levels, exclude = NA, ordered = FALSE, nmax = NA),其中x是输入向量,levels指定因子水平,labels用于重命名水平,exclude排除特定值,ordered指定因子是否有序。
levels()查看或设置因子的水平(类别)。例如,levels(my_factor)查看水平,levels(my_factor) <- c("A", "B", "C")重新设置水平。
as.numeric()将因子转换为数值型向量,但注意这通常不是因子的原始数值索引,而是因子水平的顺序编号。
as.character()将因子转换为字符型向量,即因子的标签。
recode()dplyr包中,用于重新编码因子的水平。需要加载dplyr包。
fct_recode()forcats包中,提供更为灵活的因子水平重编码功能。
fct_relevel()forcats包中,用于改变因子的水平顺序。
fct_drop()forcats包中,用于删除因子中未使用的水平。
fct_collapse()forcats包中,用于将多个因子水平合并为一个。
ordered()创建有序因子。语法与factor()类似,但通过设置ordered = TRUE参数指定因子有序。
table()用于生成因子的频数表,展示每个水平的观测数。
str()查看数据结构的详细信息,对于因子,可以显示其水平和存储的整数编码。
tapply()分组调用函数,根据因子的水平对向量进行分组,并对每组应用指定的函数。
split()根据因子将向量或数据框分割成列表,每个列表元素包含对应因子水平的数据。
by()根据一个或多个因子对数据框进行分组,并对每组应用指定的函数。

日期和时间(Date and Time)

R语言提供了处理和操作日期和时间的特殊数据类型,这些类型包括“Date”(日期)、“POSIXct”(日期和时间)和“POSIXlt”(日期和时间的列表表示)。

这里我使用了lubridate包来进行操作:

library(lubridate)  

# 创建日期对象  
date1 <- as.Date("2023-04-01")  
date2 <- as.Date("2023/04/02")  

# 创建时间对象  
time1 <- as.POSIXct("2023-04-01 12:00:00")  
time2 <- as.POSIXct("2023-04-02 15:30:00", tz = "UTC")  

# 格式化日期和时间  
formatted_date <- format(date1, "%Y-%m-%d")  
formatted_time <- format(time1, "%Y-%m-%d %H:%M:%S")  

# 提取日期和时间的组成部分  
year_of_date <- year(date1)  
month_of_date <- month(date1)  
day_of_date <- mday(date1)  
hour_of_time <- hour(time1)  
minute_of_time <- minute(time1)  
second_of_time <- second(time1)  

# 日期时间计算  
date_diff <- difftime(date2, date1, units = "days")  
time_diff <- difftime(time2, time1, units = "hours")  

# 使用lubridate包进行日期时间操作  
today_date <- today()  
now_time <- now()  

# 解析不同格式的日期时间字符串  
parsed_date1 <- ymd("20230401")  
parsed_date2 <- mdy("04/02/2023")  
parsed_time <- ymd_hms("2023-04-01 12:00:00")  

# 提取和设置日期时间的年、月、日等  
extracted_year <- year(parsed_date1)  
parsed_date1_updated <- update(parsed_date1, year = 2024)  

# 日期时间的舍入  
rounded_date <- floor_date(parsed_date1, "month")  
rounded_time <- round_date(parsed_time, "hour")  

# 打印结果
cat("格式化日期:", formatted_date, "\n")  
cat("格式化时间:", formatted_time, "\n")  
cat("日期中的年份:", year_of_date, "\n")  
cat("日期差:", date_diff, "天\n")  
cat("时间差:", time_diff, "小时\n")  
cat("今天的日期:", today_date, "\n")  
cat("当前时间:", now_time, "\n")  
cat("解析的日期1:", parsed_date1, "\n")  
cat("解析的日期2:", parsed_date2, "\n")  
cat("解析的时间:", parsed_time, "\n")  
cat("提取的年份:", extracted_year, "\n")  
cat("更新的日期:", parsed_date1_updated, "\n")  
cat("四舍五入的日期:", rounded_date, "\n")  
cat("四舍五入的时间:", rounded_time, "\n")

脚本输出:
在这里插入图片描述

R语言中的日期和时间操作方法表格如下:

方法/函数描述
as.Date()将字符型或数值型数据转换为日期对象。默认格式为“YYYY-MM-DD”。
Sys.Date()返回当前系统日期。
format()将日期或时间对象按照指定的格式进行格式化。
weekdays()返回日期对象的星期几名称。
months()返回日期对象的月份名称。
quarters()返回日期对象所在的季度。
Sys.time()返回当前系统日期和时间。
as.POSIXct()将日期时间字符串转换为POSIXct对象,后者以秒为单位自1970-01-01 UTC起算。
as.POSIXlt()类似于as.POSIXct(),但返回的是一个列表,包含年、月、日等详细时间信息。
日期加减运算日期对象可以与数值进行加减运算,表示日期的加减天数。
difftime()计算两个日期或时间之间的差异,可以指定单位(如天、小时等)。
seq.Date()seq()(用于日期)生成日期序列。可以通过设置起始日期、结束日期和步长来生成日期序列。
lubridate包函数today()now()ymd()mdy()dmy()等,提供更方便的日期时间生成、解析和格式化功能。
year(), month(), mday()lubridate包中,用于提取日期时间对象的年、月、日等组成部分。
hour(), minute(), second()lubridate包中,用于提取时间对象的时、分、秒等组成部分。
floor_date(), round_date()lubridate包中,用于对日期进行向下或向上舍入到指定的时间单位(如天、月、年)。

Tibble

Tibble是tibble包提供的一种现代化的数据框,可以将tibble是一种优化的数据框(data.frame),提供了许多便捷的操作方法,具有更严格的子集操作。

library(tidyverse)

# 创建一个tibble  
my_tibble <- tibble(  
  name = c("Alice", "Bob", "Charlie"),  
  age = c(25, 30, 35),  
  height = c(165, 175, 180)  
)  
  
# 打印tibble  
print(my_tibble)  
  
# 访问tibble中的name列  
print(my_tibble$name)  

# 使用dplyr包中的函数来操作tibble,筛选出年龄大于30的记录  
filtered_tibble <- my_tibble %>% filter(age > 30)  
print(filtered_tibble)  
  
# 在tibble中添加一列  
my_tibble <- my_tibble %>% mutate(weight = c(60, 70, 80))  
print(my_tibble)  
  
# 对tibble进行排序  
sorted_tibble <- my_tibble %>% arrange(desc(age))  
print(sorted_tibble)

初始创建的tibble如下:
在这里插入图片描述
经过操作后的tibble如下:
在这里插入图片描述
在有些情况下在导包的时候会产生报的兼容警报:

> library(tidyverse)
── Attaching core tidyverse packages ─────────────────────────────────────── tidyverse 2.0.0 ──
✔ dplyr   1.1.4     ✔ readr   2.1.5
✔ forcats 1.0.0     ✔ stringr 1.5.1
✔ ggplot2 3.5.1     ✔ tibble  3.2.1
✔ purrr   1.0.2     ✔ tidyr   1.3.1
── Conflicts ───────────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package to force all conflicts to become errors

这时使用conflicted包来管理冲突即可:

library(conflicted)
conflict_prefer("filter", "dplyr")
conflict_prefer("lag", "dplyr")

R语言中的tibble操作方法表格如下:

方法名描述示例代码
tibble()创建一个新的tibble,输入可以是向量、列表等tibble(name = c("Alice", "Bob"), age = c(25, 30))
as_tibble()将其他类型的数据结构(如data.frame、list)转换为tibbleas_tibble(iris)as_tibble(list(a = 1:5, b = letters[1:5]))
$提取tibble中的某一列my_tibble$name
[[类似$,但可用于编程方式提取列,特别是当列名存储在变量中时my_tibble[["name"]]
%>%管道操作符,将左侧对象传递给右侧函数的第一个参数my_tibble %>% filter(age > 30)
filter()从tibble中筛选出满足条件的行(dplyr包)my_tibble %>% filter(age > 30)
select()选择tibble中的列(dplyr包)my_tibble %>% select(name, age)
mutate()在tibble中添加新列或修改现有列(dplyr包)my_tibble %>% mutate(weight = age * 10)
arrange()对tibble中的行进行排序(dplyr包)my_tibble %>% arrange(desc(age))
group_by()对tibble中的行进行分组,以便后续进行汇总操作(dplyr包)my_tibble %>% group_by(age) %>% summarise(mean_height = mean(height))
summarise()对分组后的tibble进行汇总计算(dplyr包)同上例中的summarise()部分
slice()选择tibble中的行(dplyr包),可以按位置选择或基于条件选择my_tibble %>% slice(1:2)my_tibble %>% slice(which(age > 30))
rename()重命名tibble中的列(dplyr包)my_tibble %>% rename(Name = name, Age = age)
pivot_longer()将tibble从宽格式转换为长格式(tidyr包,tidyverse的一部分)my_tibble %>% pivot_longer(cols = c(age, height), names_to = "attribute", values_to = "value")
pivot_wider()将tibble从长格式转换为宽格式(tidyr包,tidyverse的一部分)pivot_longer()相反的操作

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

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

相关文章

InstantID: Zero-shot Identity-Preserving Generation in Seconds

https://arxiv.org/pdf/2401.07519#page9.73https://github.com/instantX-research/InstantID?tabreadme-ov-filehttps://github.com/instantX-research/InstantID/pull/89/files 问题引入 目标是生成和reference图片相符合的图片&#xff0c;特别是人脸&#xff1b;现在基于…

C++必修:unordered_set/unordered_map

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C学习 贝蒂的主页&#xff1a;Betty’s blog 1. unordered_set的介绍 unordered_set是一种关联式容器&#xff0c;它具有以下几…

使用MVC设计模式根据软件系统设计建设高校数字化教育教学资源共享平台

目录 案例 【题目】 【问题 1】(9 分) 【问题 2】(6 分) 【问题 3】(10 分) 答案 【问题 1】答案 【问题 2】答案 【问题 3】解析 相关推荐 案例 阅读以下关于软件系统设计的叙述&#xff0c;在答题纸上回答问题 1 至问题 3。 【题目】 某软件企业受该省教育部门委托…

【SpringCloud Alibaba】(九)学习 Gateway 服务网关

目录 1、网关概述1.1、没有网关的弊端1.2、引入 API 网关 2、主流的 API 网关2.1、NginxLua2.2、Kong 网关2.3、Zuul 网关2.4、Apache Shenyu 网关2.5、SpringCloud Gateway 网关 3、SpringCloud Gateway 网关3.1、Gateway 概述3.2、Gateway 核心架构 4、项目整合 SpringCloud …

【妙招大放送】:苹果手机数据恢复的4个技巧来啦!

手机是我们日常生活中不可或缺的一部分&#xff0c;它存储着照片、视频、联系人等许多重要的数据。但是&#xff0c;意外时有发生&#xff0c;我们有时会因为软件崩溃或者是手机损坏等的原因导致这些重要的数据丢失。那么&#xff0c;对于苹果用户来说&#xff0c;苹果手机数据…

电源技术中的深力科强力推荐一款低功耗、高效率同步降压变换器SiLM6609 致力于为您提供高品质电源技术解决方案

在能源紧张且智能化技术高速发展的当下&#xff0c;电源是电子设备不可或缺的核心。电源的质量和效率直接关系到设备的稳定运行和能耗控制&#xff0c;对于提高设备性能和降低运营成本至关重要。 为应对现代电子设备对性能与能耗的严苛要求&#xff0c;SiLM6609——低功耗、高…

.NET 一款通过白名单程序执行命令的工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

Adobe Photoshop PS v25.6 下载安装教程(PS下载)

前言 Adobe Photoshop 是一款专业强大的图片处理工具&#xff0c;从照片编辑和合成到数字绘画、动画和图形设计&#xff0c;一流的图像处理和图形设计应用程序是几乎每个创意项目的核心所在。利用 Photoshop 在桌面上的强大功能&#xff0c;您可以在灵感来袭时随时随地进行创作…

vue2使用electron-builder打包-使用electron的api实现文件下载

本项目用的是vue2版本开发&#xff0c;最后使用electron-builder打包成桌面应用程序 一、需求描述 1、用户点击按钮&#xff0c;下载html文件 2、代码 exportHtml() { //.html是放在public文件夹下面的本地文件axios.get("/html/合同模板.html").then(res > {let…

网络通信和TCP/IP协议详解

目录 网络协议 一、计算机网络是什么&#xff1f; 定义和分类 计算机网络发展简史 二、计算机网络体系结构 OSI 七层模型 TCP/IP 模型 TCP/IP 协议族 IP、TCP 和UDP TCP/IP 网络传输中的数据 地址和端口号 MAC 地址 IP 地址 端口号 综述 三、TCP 特性 TCP 三次握…

2024最新影视视频APP源码/猕猴桃影视系统源码/独立后台(支持安卓端+苹果端)

源码简介&#xff1a; 最新影视视频APP源码&#xff0c;它是猕猴桃影视系统源码&#xff0c;它有个独立的后台&#xff0c;无论你是安卓还是苹果用户&#xff0c;都能轻松使用呢。 绿豆源码、绿豆影视、小乌2.1&#xff0c;还有猕猴桃影视。追影兔新版本的整体结构设计已经全…

Transformer模型-3-基本工作流程

继 《Transformer模型-2-模型架构》该文主讲Transformer的基本工作流程。 第一步: 获取输入句子某单词的向量X。 X&#xff1a;是指某单词的向量&#xff0c;transformer是分别计算word embedding和position embedding并将两者相加得到向量X。 Embedding Embeddings 是一种将现…

Spring-bean的循环依赖

文章目录 什么是Spring的循环依赖?Setter 方法循环依赖三级缓存Spring 是如何利用三级缓存解决 Bean 的循环依赖&#xff1f;有了三级缓存为什么还需要二级缓存&#xff1f; 构造器循环依赖总结 什么是Spring的循环依赖? 在 Spring 框架中&#xff0c;循环依赖是指两个或多个…

萌化人心的AI宠物视频:1条爆款35万赞,带你轻松涨粉10万(附教程)

萌宠系的小动物配上可爱的 BGM&#xff0c;场景情绪感直接拉满。用 AI 做超萌宠物视频&#xff0c;涨粉确实香&#xff0c; 分享一个有趣的 AI 宠物玩法&#xff0c;使用用 AI 生成超萌动物&#xff08;水獭&#xff09;&#xff0c;做成宠物互动的场景式&#xff0c;这种视频播…

掌握Go语言的基本数据类型:编程世界的ABC

Go语言以其精炼的语法和卓越的性能&#xff0c;正日益成为现代软件开发的关键驱动力。在Go语言的众多特性中&#xff0c;基本数据类型的重要性不言而喻&#xff0c;它们是构建任何复杂应用程序的基石。正如掌握任何新语言需从其基础元素开始&#xff0c;Go语言的学习同样始于对…

【qt】windows下qt连接数据库

1.新建数据库 create database mydatabase;2.新建表结构&#xff0c;并插入数据 3.qt下连接数据库 1.连接数据库&#xff0c;需要加sql 2.添加QsqlDatabase头文件&#xff0c;使用提示句柄&#xff0c;头文件QMessageBox 3.连接数据库 4.界面设计 5.插入实现 注意这里如果…

盛水最多的容器问题

目录 一题目概述&#xff1a; 二思路理解&#xff1a; 三解答代码&#xff1a; 一题目概述&#xff1a; leetcode链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 二思路理解&#xff1a; 首先这道题虽然看起来简单&#xff0c;很难不让人想到直接暴力破解它&a…

【操作系统】12.文件系统是怎么管理的?

2.文件系统是怎么管理的&#xff1f; 2.1 文件系统的实现 2.1.1 文件系统层次结构 用户调用接口 文件目录系统 存取控制验证模块 逻辑文件系统与文件信息缓冲区 物理文件系统 辅助分配模块 设备管理程序模块 2.1.2 目录实现 线性列表 哈希表 2.1.3 文件实现 文件分配方式 连续…

Unity射击游戏开发教程:(32)控制子弹射速

显示发射速度从较慢到较快的变化 这是一篇关于如何实现射速以防止玩家乱按射击按钮的快速文章。 通常做法 说到要控制子弹的射速,可以通过以下几种方法: 通过设置子弹的发射间隔时间来控制射速。在每次子弹发射后,设置一个时间延迟,确保下一枚子弹不能立即发射。 利用计时…

Redis下载安装使用教程图文教程(超详细)

《网络安全自学教程》 Redis下载安装使用 1、下载安装2、基础配置2.1、远程连接2、保护模式3、默认密码4、后台运行4.1 验证服务是否启动4.2 停止服务 1、下载安装 1&#xff09;到Redis中文网 https://www.redis.com.cn/download.html 下载Redis安装包 2&#xff09;Redis的安…