【问题标题】:Calculate the matrix of square of a sum in R计算R中和的平方矩阵
【发布时间】:2021-10-04 17:08:42
【问题描述】:

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

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 %*% t(v)
  • @MartinGal 非常感谢!

标签: r microbenchmark


【解决方案1】:

你想要的只是外部产品:

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()效率更高

【讨论】:

  • 非常感谢!
【解决方案2】:
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 创建

【讨论】:

  • 非常感谢!
猜你喜欢
  • 1970-01-01
  • 2015-07-05
  • 2019-08-18
  • 2014-03-15
  • 1970-01-01
  • 1970-01-01
  • 2020-01-02
  • 2013-01-04
  • 1970-01-01
相关资源
最近更新 更多