R语言如何计算向量所有两两元素组合的和并生成对应矩阵
R生成向量两两元素求和的矩阵
你需要的两两元素和矩阵可以通过以下几种R原生方法实现,不需要依赖第三方包。
方法1:outer函数(最优方案)
outer是R内置的外运算函数,支持自定义两个向量元素的两两运算规则,用来做求和代码最简洁、运行效率最高:
# 示例向量 vec <- c(1, 2, 3, 4, 5) # 计算两两和矩阵 sum_mat <- outer(vec, vec, `+`)
运行后输出的sum_mat和你给出的期望结果完全一致:
[,1] [,2] [,3] [,4] [,5] [1,] 2 3 4 5 6 [2,] 3 4 5 6 7 [3,] 4 5 6 7 8 [4,] 5 6 7 8 9 [5,] 6 7 8 9 10
该方法为向量化运算,即使处理长度很大的向量也能保持很高的运行速度,是这类需求的首选实现。
方法2:矩阵复制相加
如果想更直观地体现“每个行元素和每个列元素相加”的逻辑,可以通过复制向量生成同尺寸的行矩阵、列矩阵后直接相加:
n <- length(vec) # 列方向复制向量生成矩阵,加行方向复制向量生成的矩阵 sum_mat <- matrix(vec, nrow = n, ncol = n) + matrix(vec, nrow = n, ncol = n, byrow = TRUE)
也可以用rep函数实现同样的复制逻辑:
n <- length(vec) sum_mat <- matrix(rep(vec, n) + rep(vec, each = n), nrow = n)
以上两种写法得到的结果和outer方法完全相同。
注意事项
不建议使用双层for循环遍历向量下标逐个计算赋值,R中循环的运行效率远低于向量化运算,当向量长度较大时性能差距会非常明显。
内容的提问来源于stack exchange,提问作者hyoud
相关产品推荐
相关产品推荐

