clc;clear all;
a=rand(3,4,2,3,2) %任意5阶张量
a=tensor(a);% 此处tensor函数作用是将a转为tensor类型
M1=tenmat(a,1);% mode 1矩阵
M2=tenmat(a,2);% mode 2矩阵
M3=tenmat(a,3);% mode 3矩阵
M4=tenmat(a,4);% mode 4矩阵
M5=tenmat(a,5);% mode 5矩阵
%% 下面将mode n矩阵转为原张量a
a
a1=tensor(M1)
a2=tensor(M2)
a3=tensor(M3)
a4=tensor(M4)
a5=tensor(M5)
注意: 上述M1-5矩阵是tenmat类型,可以使用tensor将其转为原张量。 如果计入别的计算,需要将M1-5转换为double类型,即M11=double(tenmat(a,1);); 但是此时double类型的M11就不能使用tensor函数转为原张量了。
那么使用下面方式,将double类型的mode n矩阵转为原张量:
M11=double(M1)
rdims =M1.rdims% Dimensions that were mapped to the rows.
cdims =M1.cdims% Dimensions that were mapped to the columns.
tsize = size(a) %或M1.tsize % Size of the original tensor.
M10=tenmat(M11,rdims,cdims,tsize)
a1=tensor(M10)
a
这里a1与原张量一样了,即成功将mode-1矩阵转为原张量。类似其他mode-n矩阵同理。
下面是对3维张量进行mode n矩阵和原张量互转,笨方法(上述看明白了 下面就不需要看了):
%测出的结论
mode n矩阵 逆变回原张量 :
inp=rand(3,4,2) %三维数组
inp=tensor(inp);% 转为tensor类型
M=tenmat(inp,1);%产生张量inp的 mode 1矩阵 (属于tenmat类)
M11=double(M); %转为矩阵类
M3D1=reshape(M11,[3,4,2]) % mode 1 矩阵逆回原张量
M2=tenmat(inp,2);%
M21=double(M2);%
M3D2=tensor(M21,[4,3,2])
aa=permute(M3D2,[2,1,3])% mode 2 矩阵逆回原张量
M3=tenmat(inp,3);%
M31=double(M3);%
M3D3=tensor(M31',[3,4,2]) % mode 3 矩阵逆回原张量