Учитывая p
векторов x1,x2,...,xp
каждого измерения d
, каков наилучший способ вычислить их тензорное / внешнее / произведение Крускала (массив p
с записями X[i1,i2,..ip] = x1[i1]x2[i2]...xp[ip])
? Циклирование тривиально, но Глупо. Использование повторных вызовов outer
работает нормально, но не кажется оптимальным решением (и будет увеличиваться с ростом p, очевидно). Есть ли лучший способ?
Edit:
Мой лучший результат
array(apply(expand.grid(x1, x2, x3), 1, prod), dim=rep(d, 3))
который, по крайней мере, чувствует себя лучше ...
Редактировать 2: В ответ на @Dwin вот завершено пример
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