【问题标题】:r matrix product element by elementr 矩阵乘积元素
【发布时间】:2012-11-24 17:57:37
【问题描述】:

我有 3 个矩阵:

 A (n by K), 

 B (L by m) and 

 C (L by K) 

并且想产生第四个矩阵

D (n by m) 

有元素

D(i,j) = sum(B[,i,drop=FALSE]%*%A[j,,drop=FALSE] * C)

(注意 B[,i,drop=FALSE]%*%A[j,,drop=FALSE] 是 (L × 1) 矩阵与 (1 × K_ 矩阵的乘积,因此是 ( L by K),就像 C 一样。“sum”对结果矩阵的所有元素求和)

这样做的一种方法是创建一个网格作为 expand.grid(1:n,1:m) 并为每个元素计算 D(.,.)。关于如何在 R 中更快地做到这一点的任何想法?

谢谢!

【问题讨论】:

  • A 和 B 在我看来不太符合。
  • 我是否遗漏了什么,或者 B[,i] 是 L 乘 1,A[j,] 是 1 乘 K? (所以产品是 L 乘 K?)
  • 请注意,我不是将 A 乘以 B
  • B[,i] 和 A[j,] 是向量。也许你想要 B[,i,drop=FALSE] 和 A[j,,drop=FALSE]。或者使用外积代替矩阵乘法。
  • 谢谢,有道理。我编辑帖子。

标签: performance r matrix product


【解决方案1】:
library(reshape2)
library(plyr)  
m <- 100;n <- 100;K <- 100;L <- 100
A <- matrix(sample(1:n),nrow=n,ncol=K)
B <- matrix(sample(1:L),nrow=L,ncol=m)
C <- matrix(sample(1:L),nrow=L,ncol=K)

h <- ddply(expand.grid(1:m,1:n),.(Var1,Var2),
           f <- function(i) {sum(B[,i$Var1,drop=FALSE]%*%A[i$Var2,,drop=FALSE]*C)})
D <- acast(h, Var2 ~ Var1)

【讨论】:

  • 谢谢,这可行,但你认为它比在 expand.grid(1:m,1:n) 上使用常规应用更快吗?非常感谢
猜你喜欢
  • 2019-11-23
  • 1970-01-01
  • 2019-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多