假设我有两个矩阵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)))
。 - akrunmylist
对象,这将使你的 for 循环方法明显更快。使用mylist = vector("list", 5)
。 - talat