R语言如何通过向量各元素两两相减构建指定差值矩阵
方法1:使用outer()函数(最简洁的向量化实现)
outer()是R中专门用于逐元素交叉运算的函数,刚好匹配你的需求,一行代码即可完成:
# 定义原始向量 a <- c(17.4, 17.2, 17.0, 16.9, 17.0, 17.4) # 构建目标矩阵 A <- outer(a, a, FUN = `-`)
运算逻辑:返回的矩阵第i行第j列的值为a[i] - a[j],完全符合你要求的「每行对应向量的第i个元素减去所有向量元素」的规则。
方法2:循环实现(适合理解底层逻辑)
如果需要手动遍历实现逻辑,可以用行循环的方式写:
a <- c(17.4, 17.2, 17.0, 16.9, 17.0, 17.4) n <- length(a) # 初始化空矩阵 A <- matrix(NA, nrow = n, ncol = n) # 逐行赋值 for (i in 1:n) { A[i, ] <- a[i] - a }
输出验证
打印A即可得到你给出的目标结果:
[,1] [,2] [,3] [,4] [,5] [,6] [1,] 0.0 -0.2 -0.4 -0.5 -0.4 0.0 [2,] 0.2 0.0 -0.2 -0.3 -0.2 0.2 [3,] 0.4 0.2 0.0 -0.1 0.0 0.4 [4,] 0.5 0.3 0.1 0.0 0.1 0.5 [5,] 0.4 0.2 0.0 -0.1 0.0 0.4 [6,] 0.0 -0.2 -0.4 -0.5 -0.4 0.0
内容的提问来源于stack exchange,提问作者Milaa
相关产品推荐
相关产品推荐

