【发布时间】:2016-02-10 05:55:48
【问题描述】:
假设我有两个矩阵 x 和 y,尺寸均为 100x2。我想创建一个列表,这样对于 x 和 y 的每一行,我都有矩阵 t(x) %*% y。例如,通过 for 循环:
x = matrix(rnorm(10), nrow = 5)
y = matrix(rnorm(10), nrow = 5)
myList = list()
for(i in 1:5){
myList[[i]] = t(x[i, , drop = FALSE]) %*% y[i, ]
}
有没有更有效的方法来做这个计算?我试图弄清楚如何表达这个矩阵乘法但没有运气。我也考虑过 mapply,但似乎我需要将 x 和 y 转换为向量列表而不是矩阵才能使用 mapply,我怀疑这也是正确的方法。
【问题讨论】:
-
我想应该是
Map(function(x,y) matrix(x,ncol=1)%*%y , split(x, row(x)), split(y, row(y))) -
您应该预先分配
mylist对象,这将使您的 for 循环方法明显更快。使用mylist = vector("list", 5)
标签: r matrix matrix-multiplication