i网站建设,原子艺术做的网站怎么样子,绿色风格网站,基于python的网站开发t-product是一个比较好的概念#xff0c;相对应于矩阵中的乘法。
定义如下 这里的 circ(A),MatVec(b) 的定义分别如下 这么定义的原因是为了映射到FFT域里面去#xff0c;简化计算。 上面的一段摘录说明#xff1a;直接按照定义来计算#xff0c;会耗费大量的计算资源。因…t-product是一个比较好的概念相对应于矩阵中的乘法。
定义如下 这里的 circ(A),MatVec(b) 的定义分别如下 这么定义的原因是为了映射到FFT域里面去简化计算。 上面的一段摘录说明直接按照定义来计算会耗费大量的计算资源。因此实际使用中是应用的另外一种方法“FFT”. 这两个等式是相等的因为下面的公式其实施加了FFT变换之后又做了逆变换。注意发现上面的等式很有意思结合文字好好看一下就有下面的计算方式。
计算方式
简单的说 A∗B 的过程如下
先把 A,B 模三展开对每一个切片分别施加FFT, A¯(i),B¯(i)切片对应相乘 A¯(i)∗B¯(i)折叠回张量。
具体的原理只知道可以这么做。具体理论分析等待后续的知识也在这篇论文上。
Matlab代码实现
function C tprod(A, B)
% tensor-tensor product of two 3-order tensors : C A * B
% compute in the Fourier domain, efficiently
% A - n1 x n2 x n3 tensor
% B - n2 x l x n3 tensor
% C - n1 x l x n3 tensor
[n1, ~, n3] size(A);
l size(B, 2);
Af fft(A, [], 3);
Bf fft(B, [], 3);
Cf zeros(n1, l, n3);
for i 1 : n3Cf(:, :, i) Af(:, :, i) * Bf(:, :, i);
end
C ifft(Cf, [], 3);
end
fft(A,[],3)是标准的三阶张量沿模三做FFT的matlab操作.不必理会。 一个模拟数据验证
clc
clear all
%如何计算两个张量的t-product
X1 1:12;
X1 reshape(X1,[3,4]);
X2 13:24;
X2 reshape(X2,[3,4]);
X(:,:,1) X1;
X(:,:,2) X2;
Y1 ones(4,3);
Y2 ones(4,3);
Y(:,:,1) Y1;
Y(:,:,2) Y2;
C tprod(X,Y)
C1 X1*Y1 X2*Y2
C2 X2*Y1 X1*Y2
结果如下
C
C(:,:,1) 92 92 92100 100 100108 108 108C(:,:,2) 92 92 92100 100 100108 108 108C1 92 92 92100 100 100108 108 108C2 92 92 92100 100 100108 108 108
总结
简单的记录一下免的遗忘。
参考文献Factorization strategies for third-order tensors