计算R中和的平方矩阵

Calculate the matrix of square of a sum in R

我希望这不是一个重复的问题。我想计算矩阵形式的向量之和的平方。例如,我有一个向量:

v = c(a, b, c, d)

我想实现的是方程展开的矩阵形式(a+b+c+d)^2 = a^2 + b^2 + c^2 + d^2 + 2ab + 2ac + 2ad + 2bc + 2bd + 2cd 为:

a^2  ab   ac   ad
ab   b^2  bc   bd
ac   bc   c^2  cd
ad   bd   cd   d^2

r 中有没有不用手写的函数?

非常感谢您的帮助。

v = 1:4
tcrossprod(v)
#>      [,1] [,2] [,3] [,4]
#> [1,]    1    2    3    4
#> [2,]    2    4    6    8
#> [3,]    3    6    9   12
#> [4,]    4    8   12   16

reprex package (v2.0.1)

于 2021-10-04 创建

你想要的只是外积:

v <- 1:5
outer(v, v, '*')
#      [,1] [,2] [,3] [,4] [,5]
#[1,]    1    2    3    4    5
#[2,]    2    4    6    8   10
#[3,]    3    6    9   12   15
#[4,]    4    8   12   16   20
#[5,]    5   10   15   20   25

对不同方法进行基准测试:

library(microbenchmark)
library(ggplot2)
v <- 1:1000
mbm <- microbenchmark("outer" = { outer(v, v, '*') },
                      "matprod" = { v%*%t(v)   },
                      "tcrossprod" = { tcrossprod(v)})
autoplot(mbm)

上图显示outer()和直接矩阵乘积比tcrossprod()

更有效率