我正在寻找一种方法来计算 Julia 中三个以上向量之间的外积。
令a、b、c和d为向量,每个大小分别为I、J、K和L。然后,它们的外积被定义为一个T大小为 的张量I x J x K x L,每个元素定义为
T[i,j,k,l] = a[i]*b[j]*c[k]*d[l]
Julia 中是否有任何有用的函数可以从向量中获取T?
编辑
我发布了一个关于outer没有内存分配的函数的新问题。
小智 5
您在这里要找的是kron. 采用向量的克罗内克积将得到向量,因此您可以通过重塑获得所需的张量,因此在您的情况
reshape(kron(d,c,b,a),(I,J,K,L))
或更一般情况
下reshape(kron(d,c,b,c),length.((a,b,c,d)))。我通常定义一个函数来记住顺序
outer(v...) = reshape(kron(reverse(v)...),length.(v))
Run Code Online (Sandbox Code Playgroud)
这就是求向量外积的方法,当然你可以问是否可以更普遍地对张量做类似的事情。这里处理尺寸有点乏味,但是你可以做同样的技巧
outer(v...) = reshape(kron(reverse(vec.(v))...),tuple(vcat(collect.(size.(v))...)...))
Run Code Online (Sandbox Code Playgroud)