寻求向量化方法构建向量元素差值矩阵(类比tcrossprod())
更优雅的R风格实现a[i]-a[j]矩阵生成
你可以直接使用R内置的outer()函数替代双重循环,这是完全符合R向量化操作风格的实现方式,和tcrossprod()的用法思路类似,都是利用内置函数避免手动循环:
a <- c(3, 7, 1) # 直接生成a[i]-a[j]的矩阵 M <- outer(a, a, "-") M
运行后得到的结果和你原来的循环代码完全一致:
[,1] [,2] [,3] [1,] 0 -4 2 [2,] 4 0 6 [3,] -2 -6 0
原理说明
outer()函数的作用是对两个输入向量的所有元素组合执行指定运算,第三个参数传入运算符号或自定义函数即可。这里传入"-",就会自动计算每个a[i] - a[j]的值并填充成矩阵,完全替代了手动嵌套循环的逻辑,代码更简洁也更高效。
内容的提问来源于stack exchange,提问作者user14692575
相关产品推荐
相关产品推荐

