求Julia中张量循环展开(TCU)的逆操作实现方案
张量循环展开(TCU)的逆操作实现需求
我已基于某文献定义2实现了张量循环展开(TCU),通过TensorToolbox在Julia中完成,代码如下:
using TensorToolbox function TCU(X,d,k) N = ndims(X) @assert d < N if d <= k a = k-d+1 else a = k-d+1+N end tenmat(permutedims(X,circshift(1:N,-a+1)),row=1:d) end
其中:
- N为输入张量X的维度
- d<N、k≤N为正整数
- tenmat函数来自TensorToolbox.jl,用于张量矩阵化
以下是N=4的示例:
X = rand(1:9,3,4,2,2) #3×4×2×2 Array{Int64, 4}: #[:, :, 1, 1] = # 5 7 2 6 # 4 5 6 2 # 6 8 9 1 # #[:, :, 2, 1] = # 4 3 7 5 # 8 3 3 1 # 8 2 4 7 # #[:, :, 1, 2] = # 4 3 9 6 # 7 4 9 2 # 6 7 2 4 # #[:, :, 2, 2] = # 9 2 1 7 # 8 2 1 3 # 6 2 4 9 M = TCU(X, 2, 3) #8×6 Matrix{Int64}: # 5 4 4 7 6 6 # 7 3 5 4 8 7 # 2 9 6 9 9 2 # 6 6 2 2 1 4 # 4 9 8 8 8 6 # 3 2 3 2 2 2 # 7 1 3 1 4 4 # 5 7 1 3 7 9
现需实现上述函数的逆操作InvTCU,需满足:
X == InvTCU( TCU(X, d, k), d, k )
若有需要,InvTCU可接收原张量尺寸size(X),即满足:
X == InvTCU( TCU(X, d, k), d, k, size(X) )
该逆操作是实现文献中PTRC算法公式(18)的必要步骤,且原张量尺寸为已知信息。
【补充说明】tenmat函数用于张量矩阵化,InvTCU可接收原张量尺寸作为参数。
内容的提问来源于stack exchange,提问作者Sakurai.JJ
相关产品推荐
相关产品推荐

