Với p
vectơ x1,x2,...,xp
mỗi chiều d
, cách tốt nhất để tính toán tensor/ngoài/Kruskal sản phẩm của họ (các p
-array X với mục X[i1,i2,..ip] = x1[i1]x2[i2]...xp[ip])
là gì? Looping là tầm thường, nhưng ngu ngốc. Sử dụng lặp đi lặp lại các cuộc gọi đến outer
hoạt động OK, nhưng dường như không giống như các giải pháp tối ưu (và sẽ nhận được chậm hơn như p tăng lên, rõ ràng) có cách nào tốt hơnOuter sản phẩm/tensor trong R
Edit:.?
tốt nhất hiện nay của tôi là
array(apply(expand.grid(x1, x2, x3), 1, prod), dim=rep(d, 3))
đó có ít nhất "cảm thấy tốt hơn" ...
Chỉnh sửa 2: Đáp lại @Dwin, đây là một ví dụ hoàn chỉnh
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
Điều này có thể trả lời câu hỏi của bạn - http://stackoverflow.com/questions/6192848/how-to-generalize-outer-to-n-dimensions/6193836#6193836 –
Câu trả lời được chấp nhận là khá chậm; nó có vẻ chậm hơn so với các cuộc gọi lặp đi lặp lại bên ngoài (không ngạc nhiên như thế nào nói chung nó là). Nhưng tôi nghĩ rằng có thể thứ hai có thể được điều chỉnh ... – MMM
Tôi sẽ rất ngạc nhiên nếu giải pháp 'expand.grid' nhanh hơn giải pháp' bên ngoài'. –