计算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()
更有效率
我希望这不是一个重复的问题。我想计算矩阵形式的向量之和的平方。例如,我有一个向量:
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()