matlab三维张量按页相乘
- matlab里对三维张量来说,按页加减,点乘点除都是支持的,但按页做矩阵乘法不行。
- 定义函数:
function y = newtimes(x,y)
[mx,nx,p] = size(x);
[ny,py,q] = size(y);
x1 = reshape(x,nx,ny,1,q);
y1 = reshape(y,ny,1,py,q);
y2 = permute(y1,[2 1 3 4]);
y = reshape(sum(bsxfun(@times,x1,y2),2),mx,py,q);
end
- 这里默认了两张量矩阵页维度是相同的,需要的可以自己改程序。
- 测试:
a = [1 2 3;4 5 6; 7 8 9];
b = [3 5 6 ; 5 8 3; 1 5 9];
c = [3 4 8; 5 8 6; 4 5 6];
d = [4 5 6; 2 4 6; 2 5 9];
e = [3 7 8; 5 6 6; 4 5 6];
f = [4 4 6; 2 4 6; 2 7 8];
a*b
c*d
e*f
ans =
16 36 39
43 90 93
70 144 147
ans =
36 71 114
48 87 132
38 70 108
ans =
42 96 124
44 86 114
38 78 102
T=cat(3,a,c,e); % [a,c,e],3*3*N张量
F=cat(3,b,d,f); % [b,d,f],3*3*N张量
newtimes(T,F)
ans(:,:,1) =
16 36 39
43 90 93
70 144 147
ans(:,:,2) =
36 71 114
48 87 132
38 70 108
ans(:,:,3) =
42 96 124
44 86 114
38 78 102