You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中使用apply函数生成对称方阵?

生成3阶对称矩阵的解决方案

针对你的需求,这里提供一种结合apply函数的实现方式,利用对称矩阵的性质填充元素:

首先是你的原始数据:

dat <- matrix(c(2,3,5,7,8,4), ncol = 6)
colnames(dat) <- c("A(1,1)", "A(1,2)", "A(1,3)", "A(2,2)", "A(2,3)", "A(3,3)")

接下来是实现代码:

# 定义对称矩阵的阶数
n <- 3

# 初始化空的3x3矩阵
sym_matrix <- matrix(NA, nrow = n, ncol = n)

# 使用apply遍历每一行,填充对应位置的元素
sym_matrix <- apply(sym_matrix, 1, function(row) {
  # 获取当前行的索引i
  i <- as.integer(rownames(row))
  # 遍历每一列j,根据对称关系取值
  sapply(1:n, function(j) {
    # 确定要提取的列名:i<=j时直接用A(i,j),否则用A(j,i)
    target_col <- if (i <= j) paste0("A(", i, ",", j, ")") else paste0("A(", j, ",", i, ")")
    dat[, target_col]
  })
})

# 转置结果,因为apply默认按列返回
sym_matrix <- t(sym_matrix)

# 设置行名和列名以匹配需求格式
rownames(sym_matrix) <- paste0("A(", 1:n, ",1)")
colnames(sym_matrix) <- paste0("A(1,", 1:n, ")")

# 输出结果
sym_matrix

运行后会得到符合要求的对称方阵:

A(1,1) A(1,2) A(1,3)
A(1,1)     2      3      5
A(2,1)     3      7      8
A(3,1)     5      8      4

核心思路解释

  1. 先创建一个空的3阶矩阵作为容器
  2. 通过apply遍历矩阵的每一行,对每个行索引i,再用sapply遍历所有列索引j
  3. 利用对称矩阵A(i,j)=A(j,i)的性质,构造对应的列名从dat中取值
  4. 由于apply处理后返回的结果是按列排列的,所以需要转置得到正确的行结构
  5. 最后设置行名和列名,匹配你需要的格式

内容的提问来源于stack exchange,提问作者nickolakis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 14:55:15