Julia 中三个以上向量之间的外积

Sak*_*.JJ 4 julia tensor

我正在寻找一种方法来计算 Julia 中三个以上向量之间的外积。

abcd为向量,每个大小分别为IJKL。然后,它们的外积被定义为一个T大小为 的张量I x J x K x L,每个元素定义为

T[i,j,k,l] = a[i]*b[j]*c[k]*d[l]

Julia 中是否有任何有用的函数可以从向量中获取T

编辑

我发布了一个关于outer没有内存分配的函数的新问题。

Julia 中没有内存分配的外部产品

小智 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)

  • 看起来像是 Tullio.jl 的工作? (4认同)
  • 是的,这对于 Tullio.jl 来说是完美的情况,`@tullio T[i,j,k,l] := a[i]*b[j]*c[k]*d[l]` 会做到这一点。 (2认同)