Dada p
vectores x1,x2,...,xp
cada uno de dimensión d
, ¿cuál es la mejor manera de calcular su tensor producto/Kruskal exterior/(la p
X -array con entradas X[i1,i2,..ip] = x1[i1]x2[i2]...xp[ip])
? Bucle es trivial, pero estúpida. Uso repetido llama a outer
funciona bien, pero no parece ser la solución óptima (y obtendrá más lento a medida p aumenta, obviamente) ¿hay una mejor maneraproducto/tensor exterior en R
Editar:.?
Mi actual mejor es
array(apply(expand.grid(x1, x2, x3), 1, prod), dim=rep(d, 3))
los cuales al menos "se siente mejor" ...
Edición 2: En respuesta a @Dwin, aquí hay un ejemplo completa
d=3
x1 = 1:d
x2 = 1:d+3
x3 = 1:d+6
array(apply(expand.grid(x1, x2, x3), 1, prod), dim=rep(d, 3))
, , 1
[,1] [,2] [,3]
[1,] 28 35 42
[2,] 56 70 84
[3,] 84 105 126
, , 2
[,1] [,2] [,3]
[1,] 32 40 48
[2,] 64 80 96
[3,] 96 120 144
, , 3
[,1] [,2] [,3]
[1,] 36 45 54
[2,] 72 90 108
[3,] 108 135 162
Esto podría responder a su pregunta - http://stackoverflow.com/questions/6192848/how-to-generalize-outer-to-n-dimensions/6193836#6193836 –
La respuesta aceptada es bastante lento; parece ser más lento que las llamadas repetidas al exterior (lo que no sorprende dado lo general que es). Pero creo que quizás el segundo se puede adaptar ... – MMM
Me sorprendería mucho si la solución 'expand.grid' fuera más rápida que la solución' externa'. –