非向量列表我明白如何外()按R:外()等效于R中
> outer(c(1,2,4),c(8,16,32), "*")
[,1] [,2] [,3]
[1,] 8 16 32
[2,] 16 32 64
[3,] 32 64 128
它基本上需要2个载体,发现这些矢量的交叉积,然后将该函数应用于交叉产品中的每一对。
但是我没有两个向量。我有两个矩阵列表:
M = list();
M[[1]] = matrix(...)
M[[2]] = matrix(...)
M[[3]] = matrix(...)
而且我想我matricies的名单上再做一次手术。我想要做的:
outer(M, M, "*")
在这种情况下,我想采取每个矩阵组合的点积。
其实,我试图生成一个内核矩阵(和我写了一个内核函数),所以我想做的事:
outer(M, M, kernelFunction)
其中kernelFunction
计算我的两个矩阵之间的距离。
问题是,外()只需要“向量”的参数,而不是“列表”等等。有没有一个函数,做非等值的外部()为非矢量实体?
或者,我可以用一个for循环来做到这一点:
M = list() # Each element in M is a matrix
for (i in 1:numElements)
{
for (j in 1:numElements)
{
k = kernelFunction(M[[i]], M[[j]])
kernelMatrix[i,j] = k;
}
}
,但我想避免这种情况赞成的R结构(这可能是更有效)的。 (是的,我知道我可以修改for循环来计算对角矩阵并节省50%的计算量,但这不是我想优化的代码!)
这可能吗?任何想法/建议?