当前位置:   article > 正文

1.4 张量操作_张量操作四阶张量

张量操作四阶张量

定义1.17 Mode-n Unfolding
在这里插入图片描述

An = tl.unfold(X,mode=n)
  • 1

例如mode0展开,X的第0位就是矩阵的第0维,接下来是000,001,002这样子排
比如X[0,:,:]是这样的
在这里插入图片描述
展开的X0就是这样的,把X[0.:.:]变成了一行
在这里插入图片描述
1.5.2 模式积
在这里插入图片描述
式1.43和1.45的验证

A = tl.tensor(np.array([[[1,14,15],[23,6,20],[24,18,8],[24,18,8]],
                        [[15,8,7],[28,12,17],[21,29,23],[24,18,8]],
                        [[9,5,3],[7,22,26],[21,1,19],[24,18,8]]]))

# J*I1
U0 = np.array([[1,3,7],
               [3,5,7]])
V1 = np.array([[1,3,7,1],
               [3,5,7,4],
               [3,5,7,8]])

C = tl.tenalg.mode_dot(A,U0,0)
C_unfold0 = tl.unfold(C,mode=0)

UA0 = U0@tl.unfold(A,mode=0)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

存在这种性质:
在这里插入图片描述
交换顺序的证明:

AUV = tl.tenalg.multi_mode_dot(A,[U0,V1],[0,1])
AVU = tl.tenalg.multi_mode_dot(A,[V1,U0],[1,0])
  • 1
  • 2

模式n合并性质的证明

A = tl.tensor(np.array([[[1,14,15],[23,6,20],[24,18,8]],
                        [[15,8,7],[28,12,17],[21,29,23]],
                        [[9,5,3],[7,22,26],[21,1,19]]]))

U0 = np.array([[1,3,7],
               [3,5,7],
               [5,1,4]])
V1 = np.array([[1,3,1],
               [3,7,4],
               [5,7,8]])
AVU = tl.tenalg.multi_mode_dot(A,[V1,U0],[0,0])
dirAUV = tl.tenalg.multi_mode_dot(A,[U0@V1],[0])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

注意,如果要用skip且用上了modes,则mode列表的长度要和张量阶次相等,不然可能会出错

B = tl.tensor(np.array([[[1,14,15],[23,6,20],[24,18,8]],
                        [[15,8,7],[28,12,17],[21,29,23]],
                        [[9,5,3],[7,22,26],[21,1,19]]]))

U0 = np.array([[1,3,7],
               [3,5,7],
               [5,1,4]])
U1 = np.array([[111,13,17],
               [34,45,27],
               [54,71,54]])
U2 = np.array([[11,1.3,17],
               [4,4.5,2.7],
               [4,7,54]])

B03hat = tl.tenalg.multi_mode_dot(B,[U0,U1,U2],skip=1, modes=[0,1,2],transpose=True)
B03 = tl.tenalg.mode_dot(tl.tenalg.mode_dot(B,U0.T,0),U2.T,2)

B1hat = tl.tenalg.multi_mode_dot(B,[U0,U1],skip=0, modes=[0,1],transpose=True)
B1 = tl.tenalg.mode_dot(B,U1.T,1)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

连续模式积的性质,证明过程,详见Multilinear operators for higher-order decompositions但是,这个tensor unfoldding是大端顺序,而tensorly和我们平常用的是小端顺序

在这里插入图片描述
所以常用的话,应该把上面的克罗内克积顺序颠倒,即A(1)A(2)。。。A(N)

python代码处理:

# 模式积连乘
B = tl.tensor(np.array([[[1,14,15],[23,6,20],[24,18,8]],
                        [[15,8,7],[28,12,17],[21,29,23]],
                        [[9,5,3],[7,22,26],[21,1,19]]]))

U0 = np.array([[1,3,7],
               [5,1,4]])
U1 = np.array([[111,13,17],
               [54,71,54]])
U2 = np.array([[11,1.3,17],
               [4,7,54]])

X0 = tl.unfold(tl.tenalg.multi_mode_dot(B,[U0,U1,U2]),mode=0)
# 小端
X0hat0 = U0@tl.unfold(B,mode=0)@(tl.tenalg.kronecker([U1, U2]).T)
# 大端
X0hat1 = U0@tl.unfold(B,mode=0)@(tl.tenalg.kronecker([U2, U1]).T)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

同样的,向量化vectorization满足
在这里插入图片描述因为
在这里插入图片描述

在这里插入图片描述
其中这种下标记法为:,就是动的时候先动3,3动完了再动1
在这里插入图片描述

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号