very amazing啊,这说明什么,这说明我们想要实现 t-product积 不用费劲的去搞循环矩阵,也不用去搞什么分块展开再折叠,我们要做的只是, 傅立叶变换--相乘--傅立叶逆变换 !!!
** part.1 流程讲解**
原本的t-qr分解流程:
** part.2 matlab实现**
原始版本t-product
function c=t_prod(a,b)% @author:slandarer% 用于进行张量t-product积% a*b=fold(bcirc(a)·unfold(b))% 获取张量大小[l,p,n]=size(a);dima=[l,p,n];[p,m,n]=size(b);dimb=[p,m,n];dimc=[l,m,n];if dima(2)~=dimb(1) || dima(3)~=dimb(3) error('inner tensor dimensions must agree.');end% 对a,b进行unfold展开操作ufold_a=reshape(permute(a,[2,1,3]),dima(2),[])';ufold_b=reshape(permute(b,[2,1,3]),dimb(2),[])';% 对a构建循环矩阵bcirc_a=zeros([l*n,p*n]);for i=1:n bcirc_a(:,(1:p)+(i-1)*p)=circshift(ufold_a,l*(i-1),1);end% bcirc(a)·unfold(b)ab=bcirc_a*ufold_b;% 还原张量维度c=ipermute(reshape(ab',dimc([2,1,3])),[2,1,3]);endfft版本t-product
function c=t_prod_fft(a,b)% @author:slandarer% 基于快速傅立叶变换的张量t-product积if size(a,2)~=size(b,1) || size(a,3)~=size(b,3) error('inner tensor dimensions must agree.');endffta=fft(a,[],3);fftb=fft(b,[],3);fftc=zeros([size(a,1),size(b,2),size(a,3)]);for i=1:size(a,3) fftc(:,:,i)=ffta(:,:,i)*fftb(:,:,i); endc=ifft(fftc,[],3);end比较测试
% test t-productaddpath('.t_product')a=zeros(2,3,3);a(:,:,1)=[1 2 3; 3 4 5];a(:,:,2)=[5 6 7; 7 8 9];a(:,:,3)=[9 10 11;11 12 13];b=zeros(3,2,3);b(:,:,1)=[1 2; 3 4; 5 6];b(:,:,2)=[5 6; 7 8; 9 10];b(:,:,3)=[9 10;11 12;13 14];ticc1=t_prod(a,b)tocticc2=t_prod_fft(a,b)tocc1(:,:,1) =
438 492
564 636
c1(:,:,2) =
438 492
564 636
c1(:,:,3) =
294 348
420 492
历时 0.005764 秒。
c2(:,:,1) =
438 492
564 636
c2(:,:,2) =
438 492
564 636
c2(:,:,3) =
294 348
420 492
历时 0.001014 秒。
可以发现结果完全相同,而fft版本代码更简短,而且因为省去了循环矩阵创建等操作,运行速度也相较于原始版本更快。
解读高通:从小企业成长为芯片帝国的辉煌史
SAS作为一种萌芽结构
探究家电产品的智能化升级路线
欧盟新规出台,车载酒精锁成为新车出厂标配
Vishay荣获2011创新奖最佳产品奖
张量t-product积还有另一种实现方式?
微软与多家芯片大厂合作推进RTOS项目
区块链项目想落地要注意哪些问题
小鹏自动驾驶VP离职 100亿级别的学费得出的教训惨痛
锂电池太阳能路灯安装及接线方法
PLC系统接地的目的是什么?
NVIDIA官方宣布PhysX 5.0将在2020年正式发布 进一步扩展液体模拟
对抗三星LG 日本JOLED再获470亿投资
我国2000米级水下插拔电连接器项目通过鉴定,有望打破国外垄断
北斗新一代高精度定位芯片的核心特性有哪些
德国贺利氏用Clevios™ PEDOT征服可穿戴弯曲屏市场
前8月中国品牌智能手机在俄罗斯市场份额达75%
“2019硬核中国芯领袖峰会暨颁奖盛典”在深圳落下帷幕
华为携手中移动完成首个TD-LTE语音外场测试
网购鼠标和键盘时这几个点最容易被坑