文章目录
1 tensor的mode-n矩阵开展
1.1 tensor的mode-n fibers
了解mode-n fibers能帮助你更好的理解tensor的mode-n展开,这里用一个三维tensor X ∈ R I × J × K X \in R^{I\times J \times K} X∈RI×J×K作为例子,由于这个tensor有三个维度,所以可以从三个不同的方向将其分割成一个个列向量,如下图所示:

从上到下的方向称为mode-1方向,从左到右的方向称为mode-2方向,从前往后的方向称为mode-3方向。沿mode-n方向将tensor分割得到的一个个列向量称为该tensor的mode-n fibers。
要得到 X X X的mode-n fibers,可以固定除第n维以外的其他维度的坐标,此时取出第n维度的所有的元素,即为 X X X的一个mode-n fibers。举例来说, X X X的mode-1 fibers可表示为 X [ : , j , k ] j ∈ [ 0 , J ) k ∈ [ 0 , K ) X[:,j,k]\ \ \ j\in[0,J)\ \ \ k\in[0,K) X[:,j,k] j∈[0,J) k∈[0,K), X X X的mode-3 fibers则可以表示为 X [ i , j , : ] i ∈ [ 0 , I ) j ∈ [ 0 , J ) X[i,j,:]\ \ \ i\in[0,I)\ \ \ j\in[0,J) X[i,j,:] i∈[0,I) j∈[0,J)。
同理,如果这个tensor是四维的,则它的mode-4 fibers可表示为 X [ i , j , k , : ] i ∈ [ 0 , I ) j ∈ [ 0 , J ) k ∈ [ 0 , K ) X[i,j,k,:]\ \ \ i\in[0,I)\ \ \ j\in[0,J)\ \ \ k\in[0,K) X[i,j,k,:] i∈[0,I) j∈[0,J) k∈[0,K),其中i,j,k均取整数。
1.2 tensor 的mode-n展开矩阵
在得到tensor的mode-n fibers之后,将所有fibers排列在一起即可得到该tensor的mode-n展开矩阵(每个fibers都可以看成是一个列向量)。
那么应该按怎样的顺序来排列mode-n fibers呢?
对于展开矩阵中的第 j j j列mode-n fibers,j的位置可通过如下公式得到:

这个式子很枯燥,说实话,我并没有搞懂j的计算方式,不过我搞清楚了三维tensor展开为矩阵的mode-n排列方式,通过代码能更清晰的展示它的排列顺序,下面是python的代码实现:
import numpy as np
# 矩阵X,具体见代码之后的例子,这是一个简单的3x4x2的tensor
X = [[[a0+d*3, a0+d*3+12] for d in range(0,4)] for a0 in range(1,4)]
X = np.array(X)
#-------------------------unfolding(tensor的矩阵化)-------------------------#
fibers_mode1 = [X[:,j,k] for k in range(0,2) for j in range(0,4)]
fibers_mode2 = [X[i,:,k] for k in range(0,2) for i in range(0,3)]
fibers_mode3 = [X[i,j,
张量的mode-n操作与应用详解

本文深入探讨了张量的mode-n展开和乘法,包括mode-n fibers、mode-n矩阵展开以及mode-n乘法。通过实例展示了如何从三维张量中提取mode-n fibers,并将它们排列成矩阵。此外,还详细解释了张量的mode-n乘法,如mode-1、mode-2和mode-3乘法,以及它们在图像处理中的应用,如将RGB图像转换为灰度图。
最低0.47元/天 解锁文章
2846

被折叠的 条评论
为什么被折叠?



