R语言开发入门完整指南

R语言开发入门完整指南

目录

  1. R语言简介
  2. 环境配置
  3. 包管理
  4. 基本语法
  5. 数据类型和结构
  6. 数据操作
  7. 统计分析
  8. 数据可视化
  9. 编程结构
  10. 实用技巧
  11. 学习资源

R语言简介

R是一种专为统计计算和图形设计的编程语言,广泛应用于数据分析、统计建模、机器学习和数据可视化。R语言具有以下特点:

  • 开源免费:完全免费且源代码开放
  • 丰富的包生态:CRAN上有超过18000个包
  • 强大的统计功能:内置丰富的统计函数
  • 优秀的可视化:ggplot2等包提供强大的图形功能
  • 活跃的社区:全球有庞大的用户和开发者社区

环境配置

1. 安装R

Windows系统
  1. 访问 R官方网站
  2. 点击 “Download R”
  3. 选择CRAN镜像(推荐选择中国镜像)
  4. 点击 “Download R for Windows”
  5. 下载 “base” 版本
  6. 运行安装程序,按默认设置安装
macOS系统
  1. 访问CRAN网站
  2. 点击 “Download R for macOS”
  3. 下载对应处理器版本的PKG文件
  4. 双击安装
Linux系统 (Ubuntu/Debian)
# 更新包列表
sudo apt update# 安装R
sudo apt install r-base r-base-dev# 验证安装
R --version

2. 安装RStudio

RStudio是R语言最流行的集成开发环境(IDE)。

  1. 访问 RStudio官网
  2. 下载RStudio Desktop免费版
  3. 选择对应操作系统版本
  4. 按提示安装

3. RStudio界面介绍

RStudio界面分为四个主要区域:

  • Source:代码编辑器
  • Console:R控制台
  • Environment/History:环境变量和历史记录
  • Files/Plots/Packages/Help:文件浏览器、图形输出、包管理和帮助

4. 配置R环境

# 查看R版本
version# 查看当前工作目录
getwd()# 设置工作目录
setwd("/path/to/your/directory")# 查看已安装的包
installed.packages()# 查看R的搜索路径
search()

包管理

1. 包的安装

从CRAN安装
# 安装单个包
install.packages("ggplot2")# 安装多个包
install.packages(c("dplyr", "tidyr", "readr"))# 指定镜像安装
install.packages("ggplot2", repos="https://cran.rstudio.com/")
从GitHub安装
# 首先安装devtools包
install.packages("devtools")# 从GitHub安装包
devtools::install_github("username/packagename")
从Bioconductor安装
# 安装BiocManager
install.packages("BiocManager")# 通过BiocManager安装生物信息学包
BiocManager::install("GenomicRanges")

2. 包的加载和管理

# 加载包
library(ggplot2)
# 或者
require(ggplot2)# 查看已加载的包
search()# 查看包的版本
packageVersion("ggplot2")# 更新包
update.packages()# 卸载包
remove.packages("packagename")# 查看包的帮助
help(package = "ggplot2")

3. 包依赖管理

# 查看包的依赖关系
tools::package_dependencies("ggplot2")# 安装包及其所有依赖
install.packages("ggplot2", dependencies = TRUE)

基本语法

1. 基本操作

# 赋值操作
x <- 5          # 推荐方式
x = 5           # 也可以使用
5 -> x          # 较少使用# 输出
print(x)
x               # 直接输入变量名# 注释
# 这是单行注释# 基本运算
2 + 3           # 加法:5
5 - 2           # 减法:3
3 * 4           # 乘法:12
8 / 2           # 除法:4
2^3             # 乘方:8
10 %% 3         # 取余:1
10 %/% 3        # 整除:3

2. 变量命名规则

# 有效的变量名
my_variable <- 1
myVariable <- 2
variable1 <- 3
.hidden_var <- 4# 无效的变量名(会报错)
# 1variable <- 5    # 不能以数字开头
# my-variable <- 6  # 不能包含短横线
# for <- 7          # 不能使用保留字

3. 数据检查函数

# 查看对象类型
class(x)
typeof(x)
mode(x)# 查看对象结构
str(x)# 查看对象大小
length(x)
dim(x)          # 对于矩阵和数据框# 检查数据类型
is.numeric(x)
is.character(x)
is.logical(x)
is.factor(x)

数据类型和结构

1. 基本数据类型

# 数值型 (numeric)
num1 <- 42
num2 <- 3.14159# 整数型 (integer)
int1 <- 42L
int2 <- as.integer(42)# 字符型 (character)
char1 <- "Hello"
char2 <- 'World'# 逻辑型 (logical)
log1 <- TRUE
log2 <- FALSE
log3 <- T        # TRUE的简写
log4 <- F        # FALSE的简写# 复数型 (complex)
comp1 <- 3 + 4i# 查看数据类型
class(num1)     # "numeric"
typeof(char1)   # "character"

2. 向量 (Vector)

# 创建向量
numeric_vec <- c(1, 2, 3, 4, 5)
char_vec <- c("a", "b", "c")
logical_vec <- c(TRUE, FALSE, TRUE)# 生成序列
seq1 <- 1:10                    # 1到10
seq2 <- seq(1, 10, by = 2)      # 1, 3, 5, 7, 9
seq3 <- seq(0, 1, length = 5)   # 等间距的5个数# 重复生成
rep1 <- rep(1, 5)               # 重复1五次
rep2 <- rep(c(1, 2), 3)         # 重复向量三次# 向量操作
length(numeric_vec)             # 向量长度
numeric_vec[1]                  # 第一个元素
numeric_vec[c(1, 3, 5)]         # 第1, 3, 5个元素
numeric_vec[-1]                 # 除第一个外的所有元素

3. 因子 (Factor)

# 创建因子
gender <- factor(c("M", "F", "M", "F", "M"))
education <- factor(c("High", "Medium", "Low"), levels = c("Low", "Medium", "High"),ordered = TRUE)# 查看因子
levels(gender)
nlevels(education)
summary(gender)

4. 矩阵 (Matrix)

# 创建矩阵
mat1 <- matrix(1:12, nrow = 3, ncol = 4)
mat2 <- matrix(1:12, nrow = 3, byrow = TRUE)# 矩阵操作
dim(mat1)                       # 维度
nrow(mat1)                      # 行数
ncol(mat1)                      # 列数
mat1[1, 2]                      # 第1行第2列元素
mat1[1, ]                       # 第1行
mat1[, 2]                       # 第2列# 矩阵运算
mat1 + mat2                     # 矩阵加法
mat1 * mat2                     # 元素乘法
mat1 %*% t(mat2)                # 矩阵乘法
t(mat1)                         # 转置

5. 数组 (Array)

# 创建三维数组
arr <- array(1:24, dim = c(3, 4, 2))# 数组操作
dim(arr)
arr[1, 2, 1]                    # 访问特定元素

6. 列表 (List)

# 创建列表
my_list <- list(numbers = 1:5,text = "hello",logical = c(TRUE, FALSE),matrix = matrix(1:6, nrow = 2)
)# 访问列表元素
my_list$numbers                 # 使用$符号
my_list[["text"]]               # 使用双括号
my_list[[1]]                    # 使用索引# 列表操作
names(my_list)                  # 获取元素名称
length(my_list)                 # 列表长度

7. 数据框 (Data Frame)

# 创建数据框
df <- data.frame(name = c("Alice", "Bob", "Charlie"),age = c(25, 30, 35),gender = c("F", "M", "M"),stringsAsFactors = FALSE
)# 查看数据框
head(df)                        # 前几行
tail(df)                        # 后几行
str(df)                         # 结构
summary(df)                     # 摘要统计# 访问数据框
df$name                         # 列名访问
df[, "age"]                     # 列名访问
df[1, ]                         # 第一行
df[, 1:2]                       # 前两列
df[df$age > 25, ]               # 条件筛选

数据操作

1. 数据导入导出

# 读取CSV文件
df <- read.csv("data.csv", header = TRUE)
df <- read.csv("data.csv", stringsAsFactors = FALSE)# 读取其他格式
df <- read.table("data.txt", sep = "\t", header = TRUE)
df <- read.delim("data.txt")# 使用readr包(推荐)
library(readr)
df <- read_csv("data.csv")# 读取Excel文件
library(readxl)
df <- read_excel("data.xlsx", sheet = 1)# 导出数据
write.csv(df, "output.csv", row.names = FALSE)
write.table(df, "output.txt", sep = "\t")

2. 数据清洗

# 处理缺失值
is.na(df)                       # 检查缺失值
complete.cases(df)              # 完整案例
na.omit(df)                     # 删除含缺失值的行
df[!is.na(df$age), ]            # 删除特定列的缺失值# 替换缺失值
df$age[is.na(df$age)] <- mean(df$age, na.rm = TRUE)# 重复值处理
duplicated(df)                  # 检查重复
unique(df)                      # 去重
df[!duplicated(df), ]           # 删除重复行

3. 使用dplyr进行数据操作

library(dplyr)# 筛选行
filter(df, age > 25)
filter(df, gender == "M", age > 30)# 选择列
select(df, name, age)
select(df, -gender)             # 排除某列# 排序
arrange(df, age)                # 升序
arrange(df, desc(age))          # 降序# 创建新列
mutate(df, age_group = ifelse(age > 30, "Old", "Young"))# 分组汇总
group_by(df, gender) %>%summarise(avg_age = mean(age),count = n())# 管道操作
df %>%filter(age > 25) %>%select(name, age) %>%arrange(desc(age))

4. 数据重构

library(tidyr)# 宽格式转长格式
wide_data <- data.frame(id = 1:3,A = c(1, 2, 3),B = c(4, 5, 6)
)long_data <- pivot_longer(wide_data, cols = c(A, B), names_to = "variable", values_to = "value")# 长格式转宽格式
wide_again <- pivot_wider(long_data, names_from = variable, values_from = value)

统计分析

1. 描述性统计

# 基本统计量
mean(x)                         # 平均值
median(x)                       # 中位数
sd(x)                           # 标准差
var(x)                          # 方差
min(x)                          # 最小值
max(x)                          # 最大值
range(x)                        # 范围
quantile(x)                     # 分位数
summary(x)                      # 摘要统计# 处理缺失值
mean(x, na.rm = TRUE)# 相关性分析
cor(x, y)                       # 相关系数
cor.test(x, y)                  # 相关性检验

2. 假设检验

# t检验
t.test(x)                       # 单样本t检验
t.test(x, y)                    # 双样本t检验
t.test(x ~ group, data = df)    # 分组t检验# 卡方检验
chisq.test(table(x, y))# 方差分析
aov_result <- aov(y ~ group, data = df)
summary(aov_result)# 非参数检验
wilcox.test(x, y)               # Wilcoxon检验
kruskal.test(y ~ group, data = df)  # Kruskal-Wallis检验

3. 回归分析

# 线性回归
model <- lm(y ~ x, data = df)
summary(model)
plot(model)# 多元回归
model2 <- lm(y ~ x1 + x2 + x3, data = df)# 逻辑回归
logit_model <- glm(y ~ x, family = binomial, data = df)# 模型预测
predict(model, newdata = new_df)

数据可视化

1. 基础绘图

# 散点图
plot(x, y)
plot(x, y, main = "Title", xlab = "X Label", ylab = "Y Label")# 线图
plot(x, y, type = "l")# 条形图
barplot(table(x))# 直方图
hist(x)
hist(x, breaks = 20, main = "Histogram")# 箱线图
boxplot(y ~ group, data = df)# 饼图
pie(table(x))

2. ggplot2高级绘图

library(ggplot2)# 基本语法
ggplot(data = df, aes(x = x_var, y = y_var)) +geom_point()# 散点图
ggplot(df, aes(x = age, y = income)) +geom_point() +geom_smooth(method = "lm") +labs(title = "Age vs Income",x = "Age",y = "Income")# 条形图
ggplot(df, aes(x = category)) +geom_bar() +theme_minimal()# 箱线图
ggplot(df, aes(x = group, y = value)) +geom_boxplot() +facet_wrap(~ category)# 直方图
ggplot(df, aes(x = value)) +geom_histogram(bins = 30, fill = "blue", alpha = 0.7)# 线图
ggplot(df, aes(x = date, y = value, color = group)) +geom_line() +scale_x_date(date_labels = "%Y-%m")

3. 自定义主题

# 使用内置主题
p + theme_minimal()
p + theme_classic()
p + theme_bw()# 自定义主题
p + theme(plot.title = element_text(size = 16, hjust = 0.5),axis.text = element_text(size = 12),legend.position = "bottom"
)

编程结构

1. 条件语句

# if语句
x <- 5
if (x > 0) {print("x is positive")
} else if (x < 0) {print("x is negative")
} else {print("x is zero")
}# ifelse函数(向量化)
result <- ifelse(x > 0, "positive", "non-positive")# switch语句
grade <- "A"
switch(grade,"A" = "Excellent","B" = "Good","C" = "Average","D" = "Poor","Unknown")

2. 循环结构

# for循环
for (i in 1:10) {print(i)
}for (name in c("Alice", "Bob", "Charlie")) {print(paste("Hello", name))
}# while循环
i <- 1
while (i <= 5) {print(i)i <- i + 1
}# repeat循环
i <- 1
repeat {print(i)i <- i + 1if (i > 5) break
}

3. 函数定义

# 基本函数
my_function <- function(x, y = 2) {result <- x * yreturn(result)
}# 调用函数
my_function(5)          # 使用默认参数
my_function(5, 3)       # 指定所有参数# 匿名函数
sapply(1:5, function(x) x^2)# 函数式编程
library(purrr)
map(1:5, ~ .x^2)        # 等价于上面的sapply

4. 异常处理

# try函数
result <- try({x / 0
}, silent = TRUE)if (inherits(result, "try-error")) {print("发生错误")
}# tryCatch函数
result <- tryCatch({x / 0
}, error = function(e) {print(paste("错误:", e$message))return(NA)
}, warning = function(w) {print(paste("警告:", w$message))
})

实用技巧

1. 工作空间管理

# 查看工作空间对象
ls()                            # 列出所有对象
objects()                       # 同ls()# 删除对象
rm(x)                           # 删除特定对象
rm(list = ls())                 # 删除所有对象# 保存和加载工作空间
save.image("workspace.RData")   # 保存整个工作空间
save(x, y, file = "data.RData") # 保存特定对象
load("workspace.RData")         # 加载工作空间

2. 性能优化

# 向量化操作(快)
x^2                             # 向量化# 避免循环(慢)
result <- numeric(length(x))
for (i in 1:length(x)) {result[i] <- x[i]^2
}# 使用apply函数族
apply(matrix, 1, mean)          # 对行应用函数
lapply(list, function)          # 对列表应用函数
sapply(vector, function)        # 简化输出的lapply# 预分配内存
result <- numeric(1000)         # 预分配
# 而不是逐步增长:result <- c(result, new_value)

3. 调试技巧

# 调试函数
debug(my_function)              # 进入调试模式
undebug(my_function)            # 退出调试模式# 追踪错误
traceback()                     # 查看错误堆栈# 打印调试信息
print(x)
cat("x =", x, "\n")# 使用browser()暂停执行
my_function <- function(x) {browser()                     # 在此处暂停result <- x * 2return(result)
}

4. 内存管理

# 查看对象大小
object.size(x)
print(object.size(x), units = "MB")# 查看内存使用
memory.size()                   # Windows
gc()                            # 垃圾回收# 清理内存
rm(large_object)
gc()

5. 字符串处理

# 基本字符串操作
nchar("hello")                  # 字符串长度
substr("hello", 1, 3)           # 子字符串
paste("hello", "world")         # 连接
paste0("hello", "world")        # 无分隔符连接# 正则表达式
grep("pattern", text)           # 查找模式
gsub("old", "new", text)        # 替换
strsplit("a,b,c", ",")          # 分割# stringr包(推荐)
library(stringr)
str_length("hello")
str_sub("hello", 1, 3)
str_c("hello", "world")
str_detect("hello world", "world")
str_replace("hello", "l", "x")

学习资源

1. 官方文档

  • R官方网站
  • CRAN文档
  • R语言入门

2. 在线教程

  • R for Data Science
  • Advanced R
  • R Graphics Cookbook

3. 常用包

  • 数据处理: dplyr, tidyr, data.table
  • 可视化: ggplot2, plotly, lattice
  • 统计分析: stats, car, psych
  • 机器学习: caret, randomForest, e1071
  • 文本分析: tm, quanteda, tidytext
  • 时间序列: ts, forecast, zoo
  • 网络爬虫: rvest, httr, jsonlite

4. 开发工具

  • IDE: RStudio, VSCode with R extension
  • 版本控制: Git集成
  • 包开发: devtools, usethis, roxygen2
  • 文档生成: rmarkdown, bookdown, blogdown

5. 社区资源

  • Stack Overflow R标签
  • R-bloggers
  • RStudio Community
  • Kaggle R语言课程

6. 推荐书籍

  • 《R语言实战》
  • 《ggplot2:数据分析与图形艺术》
  • 《R语言核心技术手册》
  • 《机器学习实战:基于R语言》

总结

R语言是一个功能强大的数据分析工具,具有丰富的统计功能和优秀的可视化能力。通过掌握基本语法、数据结构、包管理和常用函数,您可以高效地进行数据分析工作。建议:

  1. 循序渐进:从基础语法开始,逐步学习高级功能
  2. 多练习:通过实际项目巩固所学知识
  3. 善用社区:遇到问题时查阅文档和社区资源
  4. 保持更新:R语言和包生态系统在不断发展,注意保持知识更新

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

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

相关文章

ObservedV2装饰器和Trace装饰器

为了对嵌套类对象属性变化直接观测&#xff0c;华为提供了ObservedV2和Trace装饰器。这两个装饰器必须搭配使用&#xff0c;单独使用任何一个都不会起任何作用&#xff1b;在继承类中也可监测&#xff1b;ObservedV2的类实例目前不支持使用JSON.stringify进行序列化&#xff0c…

6月计算机新书:深度学习、大模型、DeepSeek

六月&#xff0c;这个充满活力与希望的季节&#xff0c;三本重磅新书《深度学习&#xff1a;基础与概念》、《MCP极简开发&#xff1a;轻松打造高效智能体》与《大模型应用开发&#xff1a;RAG实战课》翩然而至&#xff0c;为我们开启了一场探索科技前沿的奇妙之旅。一起来看详…

扁平风格职场商务通用PPT模版分享

扁平风格PPT模版&#xff0c;创意卡通扁平化通用PPT模版&#xff0c;创意扁平化励志论文答辩PPT模版&#xff0c;卡通职场商务PPT模版&#xff0c;职场培训&#xff0c;项目策划&#xff0c;工作总结类PPT模版&#xff0c;互联网电子商务PPT模版 扁平风格职场商务通用PPT模版分…

jupyter内核崩溃

最近在做用k-mer评估基因组规模的任务&#xff0c;其中一个局部程序&#xff0c;想偷懒&#xff0c;直接在jupyter中跑了下结果&#xff0c;想看看这一小步处理如何&#xff0c;结果没想到内核崩溃了&#xff01; 这一步我的草稿代码如下&#xff1a; import pandas as pd imp…

Java企业技术趋势分析:AI应用的落地实践与未来展望

Java企业技术趋势分析&#xff1a;AI应用的落地实践与未来展望 开篇&#xff1a;技术趋势与市场需求 在当前快速发展的数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为推动企业创新和效率提升的关键力量。Java作为企业级应用开发的主流语言&#xff0c;正…

每日Prompt:Steve Winter风格插画

提示词 世界摄影大师杰作&#xff0c;极简主义&#xff0c;Steve Winter风格&#xff0c;6只不同颜色的布偶猫围成一圈&#xff0c;看向镜头中心&#xff0c;仰天视角&#xff0c;天空背景&#xff0c;高品质细节&#xff0c;超精细CG&#xff0c;高分辨率&#xff0c;最佳品质…

Vue3 + Element Plus 获取表格列信息

在 Vue 3 和 Element Plus 中&#xff0c;可以通过以下步骤获取表格的列信息&#xff1a; 实现步骤&#xff1a; 使用 ref 绑定表格实例 通过表格实例的 store.states.columns 获取列数据 处理列信息&#xff08;过滤隐藏列、处理嵌套表头等&#xff09; 示例代码&#xf…

logger2js - JavaScript日志与调试工具库

logger2js - JavaScript日志与调试工具库 logger2js是一个功能强大的前端JavaScript日志与调试工具库&#xff0c;提供了丰富的日志输出、性能测试和代码调试功能。该库支持配置化引入&#xff0c;包含5种皮肤风格和丰富的API接口&#xff0c;如 a l e r t 增强方法、 alert增…

Stone 3D使用RemoteMesh组件极大的缩小工程文件尺寸

Stone 3D的工程文件tsp默认包含了场景中所有的对象和数据&#xff0c;这样的好处是tsp可以单独离线保存&#xff0c;但坏处是tsp文件通常偏大。 解决这个问题的方法是把外部glb模型文件通过RemoteMesh组件来加载。 首先创建一个空实体&#xff0c;然后给该空实体添加RemoteMe…

【深入剖析】攻克 Java 并发的基石:Java 内存模型 (JMM) 原理与实践指南

0.引言 理解 JMM (Java Memory Model - JMM) 是掌握 Java 并发编程的关键&#xff0c;它定义了多线程环境下&#xff0c;线程如何与主内存以及彼此之间交互内存数据。 核心目标&#xff1a; JMM 旨在解决多线程编程中的三个核心问题&#xff1a; 原子性 (Atomicity)&#xf…

【Three.js】初识 Three.js

Threejs介绍 我们开发 webgl 主要是使用 threejs 这个库&#xff0c;因为 webGL太难用&#xff0c;太复杂&#xff01;但是现代浏览器都支持WebGL&#xff0c;这样我们就不必使用Flash、Java等插件就能在浏览器中创建三维图形。 threejs 它提供-一个很简单的关于WebGL特性的J…

【经验总结】ECU休眠后连续发送NM报文3S后ECU网络才被唤醒问题分析

目录 前言 正文 1.问题描述 2.问题分析 3.验证猜想 4.总结 前言 ECU的上下电/休眠唤醒在ECU开发设计过程中最容易出问题且都为严重问题,最近在项目开发过程中遇到ECU休眠状态下连续发送NM报文3S后才能唤醒CAN网络的问题,解决问题比较顺利,但分析过程中涉及到的网络休…

企业架构框架深入解析:TOGAF、Zachman Framework、FEAF与Gartner EA Framework

执行摘要 企业架构&#xff08;EA&#xff09;是一项至关重要的实践&#xff0c;它使组织能够协调其业务战略、运营流程和技术基础设施&#xff0c;以实现整体战略目标。企业架构框架作为结构化的方法论和综合性工具&#xff0c;旨在管理企业级系统的固有复杂性&#xff0c;提…

数字化动态ID随机水印和ID跑马灯实现教育视频防录屏

摘要&#xff1a;数字化动态ID随机水印和ID跑马灯技术可以有效保护数字教育资源。动态水印将用户信息随机显示在视频上且不可去除&#xff0c;能追踪录屏者并震慑盗版行为。ID跑马灯则自定义显示观看者信息&#xff0c;便于追踪盗版源头并提供法律证据。这些技术大幅增加盗版成…

< 自用文儿 腾讯云 VPS > Ubuntu 24 系统,基本设置

前言&#xff1a; 3 月份买的腾讯云的这台 VPS&#xff0c;刚发现现在退款&#xff0c;只能返回 0 元。测试应用已经迁移到JD&#xff0c;清除内容太麻烦&#xff0c;重装更简单。 因为配合政策&#xff0c;国内的云主机都有两个 IP 地址&#xff0c;一个内网&#xff0c;一个…

React ajax中的跨域以及代理服务器

Axios的诞生 为什么会诞生Axios&#xff1f;说到Axios我们就不得不说下Ajax。最初的旧浏览器页面在向服务器请求数据时&#xff0c;由于返回的是整个页面的数据&#xff0c;所以整个页面都会强制刷新一下&#xff0c;这对于用户来讲并不是很友好。因为当我们只需要请求部分数据…

HOT 100 | 73.矩阵置零、54.螺旋矩阵、48.旋转图像

一、73. 矩阵置零 73. 矩阵置零 - 力扣&#xff08;LeetCode&#xff09; 1. 解题思路 1. 使用两个数组分别标记每行每列是否有0&#xff0c;初始化全为False&#xff0c;遇到0就变成True。 2. 遍历矩阵&#xff0c;遇到0就将False改成True。 3. 再次遍历矩阵&#xff0c;更…

神经网络压缩

网络压缩技术学习笔记 以下笔记基于提供的 PDF 文件&#xff08;tiny_v7.pdf&#xff09;&#xff0c;总结了网络压缩技术的核心概念、实现原理和方法&#xff0c;特别针对多模态大模型、空间智能以及未来智能体&#xff08;Agent&#xff09;和通用人工智能&#xff08;AGI&a…

论索引影响性能的一面④ 索引失踪之谜【上】

梁敬彬梁敬弘兄弟出品 往期回顾 论索引影响性能的一面①索引的各种开销 论索引影响性能的一面②索引的使用失效 论索引影响性能的一面③ 索引开销与经典案例 开篇&#xff1a;DBA的深夜“寻人启事” 作为数据库的守护者&#xff0c;我们最信赖的伙伴莫过于“索引”。它如同一…

java集合(九) ---- Stack 类

目录 九、Stack 类 9.1 位置 9.2 特点 9.3 栈 9.4 构造方法 9.5 常用方法 9.6 注意点&#xff1a;循环遍历 Stack 类 九、Stack 类 9.1 位置 Stack 类位于 java.util 包下 9.2 特点 Stack 类是 Vector 类的子类Stack 类对标于数据结构中的栈结构 9.3 栈 定义&…