矩阵转置与重塑
对矩阵使用 t()、dim() 和 reshape 操作
矩阵转置与重塑 是 CoddyKit 上的免费 R Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 R Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 R Academy 课程共包含 4 节课。
使用 t() 转置矩阵
t(m) 会转置矩阵——交换行和列,使结果中的第 i 行变为第 i 列。维度也会交换:3x4 矩阵转置后变为 4x3 矩阵。
m <- matrix(1:6, nrow = 2, ncol = 3)
cat('Original (2x3):
'); print(m)
cat('Transposed (3x2):
'); print(t(m))
cat('Original dim:', dim(m), '-> Transposed dim:', dim(t(m)), '
')转置带命名维度的矩阵
当矩阵具有行名和列名时,t() 会正确交换这些名称:行名变为列名,列名变为行名。这样转置后数据仍保留标签。
scores <- matrix(
c(88,92,75, 79,85,90),
nrow = 2, byrow = TRUE,
dimnames = list(c('Alice', 'Bob'), c('Math', 'Sci', 'Eng'))
)
cat('Original (students x subjects):
'); print(scores)
cat('Transposed (subjects x students):
'); print(t(scores))使用 dim(m) <- c(r, c) 重塑
您可以通过重新赋值 dim 属性来重塑矩阵。元素总数必须保持不变。重塑时会像 matrix() 一样,按列读取和填充。
m <- matrix(1:12, nrow = 3, ncol = 4)
cat('Original (3x4):
'); print(m)
# Reshape to 4x3
dim(m) <- c(4, 3)
cat('Reshaped to (4x3):
'); print(m)
# Reshape to 6x2
dim(m) <- c(6, 2)
cat('Reshaped to (6x2):
'); print(m)使用 as.vector() 将矩阵转换为向量
as.vector(m) 会将矩阵展平为一维向量,并按列读取值。这会从对象中删除所有维度属性。
m <- matrix(c(10,20,30,40,50,60), nrow = 2, ncol = 3)
cat('Matrix:
'); print(m)
v <- as.vector(m)
cat('As vector (col-by-col):', v, '
')
cat('Is vector:', is.vector(v), '
')
cat('Is matrix:', is.matrix(v), '
')使用 as.matrix() 将向量转换为矩阵
as.matrix(v) 会将向量转换为单列矩阵。这是最简单的转换方式。随后,您可以使用 dim() 对其进行重塑,以获得所需的维度。
v <- c(5, 10, 15, 20, 25, 30)
cat('Vector:', v, '
')
# as.matrix makes a 6x1 matrix
m_single_col <- as.matrix(v)
cat('Single-column matrix:
'); print(m_single_col)
cat('Dimensions:', dim(m_single_col), '
')rbind()——堆叠行
rbind() 通过堆叠行来组合矩阵或向量。所有输入必须具有相同的列数。结果矩阵的行数为各输入行数之和。
first_half <- matrix(1:6, nrow = 2, ncol = 3)
second_half <- matrix(7:12, nrow = 2, ncol = 3)
combined <- rbind(first_half, second_half)
cat('rbind result (4x3):
'); print(combined)
cat('Dimensions:', dim(combined), '
')cbind()——连接列
cbind() 通过并排连接列来组合矩阵或向量。所有输入必须具有相同的行数。结果的列数为各输入列数之和。
ids <- matrix(101:104, nrow = 4, ncol = 1)
scores_mat <- matrix(c(88,79,95,72, 92,85,78,90), nrow = 4)
full_data <- cbind(ids, scores_mat)
colnames(full_data) <- c('ID', 'Test1', 'Test2')
cat('cbind result:
'); print(full_data)带命名行列的 rbind() 和 cbind()
对带名称的矩阵或向量使用 rbind() 或 cbind() 时,维度名称会得到保留(对于向量,向量名称会变成行名或列名)。
# Add a new student row with rbind
existing <- matrix(c(88,92,75, 79,85,90), nrow = 2, byrow = TRUE,
dimnames = list(c('Alice','Bob'), c('Math','Sci','Eng')))
new_student <- c(Math=95, Sci=78, Eng=82)
updated <- rbind(existing, Carol = new_student)
cat('Updated roster:
'); print(updated)二次转置恒等式
应用两次 t() 会返回原矩阵。这是一种实用的合理性检查,也说明转置是自身的逆运算:t(t(m)) == m。
m <- matrix(c(1,2,3,4,5,6), nrow = 2)
cat('Original:
'); print(m)
cat('t(m):
'); print(t(m))
cat('t(t(m)):
'); print(t(t(m)))
cat('t(t(m)) == m:', all(t(t(m)) == m), '
')实践:透视式重塑
一种常见的重塑任务是在宽格式和长格式之间进行转换。这里我们使用矩阵运算模拟手动的宽转长透视过程——转置、展平并重新构建结构。
# Wide: 3 students x 4 months scores
wide <- matrix(c(85,88,90,92, 78,80,79,83, 91,94,88,95),
nrow = 3, byrow = TRUE)
rownames(wide) <- c('Alice', 'Bob', 'Carol')
colnames(wide) <- c('Jan', 'Feb', 'Mar', 'Apr')
cat('Wide format:
'); print(wide)
# Transposed: 4 months x 3 students
long_view <- t(wide)
cat('Transposed (months x students):
'); print(long_view)重塑与组合总结
矩阵重塑和组合的主要工具:
t(m)— 转置(交换行和列)dim(m) <- c(r, c)— 原地重塑(元素总数不变)as.vector(m)— 展平为一维向量(按列存储)as.matrix(v)— 将向量转换为单列矩阵rbind(...)— 垂直堆叠矩阵cbind(...)— 水平连接矩阵
# Demo all tools
v <- 1:6
m1 <- as.matrix(v) # 6x1
dim(m1) <- c(2, 3) # reshape to 2x3
m2 <- t(m1) # 3x2
m3 <- cbind(m2, c(10, 20, 30)) # 3x3
cat('Final matrix:
'); print(m3)快速检查
t(matrix(1:12, nrow = 3, ncol = 4)) 会生成什么维度?
回顾:转置与重塑
做得很好!本课的要点如下:
t(m)交换行和列;t(t(m))返回原矩阵dim(m) <- c(r, c)在不复制数据的情况下进行重塑(元素数量必须相同)as.vector()按列展平;as.matrix()创建单列矩阵rbind()堆叠行(列数必须相同)cbind()并排连接列(行数必须相同)- 命名维度会在这些运算中得到保留
# Practical: merge data then compute column means
team_a <- matrix(c(82,78,91, 85,80,88), nrow = 2, byrow=TRUE)
team_b <- matrix(c(75,92,79, 88,84,93), nrow = 2, byrow=TRUE)
all_teams <- rbind(team_a, team_b)
colnames(all_teams) <- c('Speed', 'Accuracy', 'Strength')
cat('Combined teams:
'); print(all_teams)
cat('Average per skill:', colMeans(all_teams), '
')用 AI 导师学习 R — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 43
- 课程
- 159
常见问题解答
「矩阵转置与重塑」课时是免费的吗?
是的 — 「矩阵转置与重塑」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 R Academy 课程的其余内容,请升级到 CoddyKit PRO。 R Academy 课程共包含 4 节课。
「矩阵转置与重塑」这节课中我会学到什么?
对矩阵使用 t()、dim() 和 reshape 操作 你通过在浏览器中直接运行的动手代码来练习 R Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 R Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 R Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「矩阵转置与重塑」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 R Academy 课中编写并运行代码吗?
能。每节 R Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。