0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MATLAB | 这是我见过最离谱的转置操作

冬至子 来源:slandarer随笔 作者:slandarer 2023-07-21 11:50 次阅读

** PART.0 长相离谱的张量转置**

注:此转置操作与 t-product 积相对应,在其他类型张量运算中的转置操作可能有不同的定义方式,请注意区分。

1.jpg

简单描述一下:

我们把三维张量每一个frontal slices(面向我们的切片),进行转置,然后将序号2到n的切片顺序完全反过来,图片描述如下:

假如以下为原始张量:

图片

转置完成后:

图片

那么。。。为什么会有如此的操作呢,其实这都是为了之后的张量inside product做准备(不叫做内积是因为有某些性质不符合内积的定义),和向量内积很像,张量内积也需要其中某个张量转置之后和另一个张量做 t-product 积,既然是做 t-product 积,就要迁就于 t-product 积的某些性质。

这里再重提一下 t-product 积的定义:

1.jpg

** PART.1 转置的特殊性质**

首先说明一下 squeeze 操作及 twist, 简单一张图就可以描述:

图片

1.jpg

这都可以相等。。very amazing 啊 ,光证明出来咋能不验证呢?

** PART.2 MATLAB实现**

我们编写如下 MATLAB 程序(引用的子函数放到最后):

X=zeros([2,1,3]);
X(:,:,1)=[1;2];
X(:,:,2)=[3;4];
X(:,:,3)=[5;6];

c=zeros([1,1,3]);
c(:)=[1,2,3];

squeeze(t_prod(X,c))
squeeze(X)*bcirc(t_T(c))

ans =

20    20    14

26    26    20

ans =

20    20    14

26    26    20

左右两边运行结果一致,非常完美,另外各个子函数如下:

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]);
end

张量转置

function AT=t_T(A)
% @author:slandarer
% 应对与张量t-product积的转置

[l,m,n]=size(A);
AT=zeros([m,l,n]);
% fronral slices转置
for i=1:size(A,3)
    AT(:,:,i)=A(:,:,i)';
end

% 径向重排序
if size(A,3) >1
    AT(:,:,1:end)=AT(:,:,[1,end:-1:2]);
end
end

squeeze

function squeezeX=squeeze(X)
% @author:slandarer
% lateral slice 翻转

if size(X,2)==1
    squeezeX=permute(X,[1,3,2]);
else
    error('MyComponent:incorrectType',...
       'Error input: nInput must be a lateral slice.')
end
end

bcirc

function bcircA=bcirc(A)
% @author:slandarer
% 用于张量展开为循环矩阵

% 获取张量大小
[l,p,n]=size(A);dimA=[l,p,n];

% 对A进行unfold展开操作
ufold_A=reshape(permute(A,[2,1,3]),dimA(2),[])';

% 对A构建循环矩阵
bcircA=zeros([l*n,p*n]);
for i=1:n
    bcircA(:,(1:p)+(i-1)*p)=circshift(ufold_A,l*(i-1),1);
end
end
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • MATLAB仿真
    +关注

    关注

    4

    文章

    176

    浏览量

    19928
  • 交换矩阵
    +关注

    关注

    0

    文章

    4

    浏览量

    5442
收藏 人收藏

    评论

    相关推荐

    MATLAB操作符和特殊字符

    % 注释  ' 或引用 = 赋值 = = 相等 < > 关系操作符 & 逻辑与 | 逻辑或 ~ 逻辑非 xor 逻辑异或 
    发表于 09-22 16:05

    求助,实现一下矩阵的函数

    )mean2(x);m=blkproc(y,[2,2],f) ;r=m(:);end这是一个函数,实现矩阵y(输入为列向量)的四邻域平均,求高手帮忙实现矩阵的函数。也就是如果这个函数的功能可以用A*y,表示,那个要求编写一个
    发表于 03-07 10:10

    MATLAB使用心得汇总——Tips 1-5 】

    以知识点的形式,罗列MALAB日常应用中的技巧操作。1MATLAB的四大金刚:矢量运算; 图形化显示; 工具箱;Simulink;2 注意共轭
    发表于 12-04 14:21

    ADC采样不精确,飘的离谱

    定义一个u32的变量,对采样到的数据做处理,*3300再/4096,通过串口看,,一个2V的方波,采样到的数据飘的离谱这是为什么、、数据处理有错吗?
    发表于 06-29 22:26

    labview中调用matlab脚本为什么会提示matlab服务器未安装matlab服务器,但是matlab已经打开,这是什么问题

    labview中调用matlab脚本为什么会提示matlab服务器未安装matlab服务器,但是matlab已经打开,
    发表于 09-02 09:46

    型FIR滤波器的实现

    相同,滤波器阶数为10。    图1  可以发现型结构不对输入数据寄存,而是对乘累加后的结果寄存,这样关键路径上只有1个乘法和1个加法操作,相比于直接型结构,延时缩短了不少。  综合得到结果
    发表于 06-28 08:22

    矩阵中的问题

    先生/女士 已经编写了用于矩阵的vhdl代码但是得到结果的问题意味着当我插入输入,时钟的值时,它没有显示任何东西。为什么它发生无法
    发表于 03-11 09:33

    C语言教程之矩阵的

    C语言教程之矩阵的,很好的C语言资料,快来学习吧。
    发表于 04-25 15:41 0次下载

    MATLAB简介及MATLAB的基本操作

    MALTAB应用技术,MATLAB简介及基本操作采取诶从上档次届超级武器。
    发表于 05-19 15:32 0次下载

    MATLAB软件环境及基本操作实验

    MATLAB 软件环境及基本操作实验
    发表于 12-16 21:32 0次下载

    华为 Mate 9 三周体验评测:4000mAh续航久的离谱

    “4000mAh续航久的离谱!”这是使用华为 Mate 9 三周之后,它最能打动的地方。
    发表于 12-13 15:09 1.2w次阅读

    MATLAB基础知识MATLAB的简介,编程环境和基本操作的详细概述

    MATLAB基础知识MATLAB的简介,编程环境和基本操作的详细概述
    的头像 发表于 06-02 10:18 7595次阅读
    <b class='flag-5'>MATLAB</b>基础知识<b class='flag-5'>MATLAB</b>的简介,编程环境和基本<b class='flag-5'>操作</b>的详细概述

    如何使用基于卷积操作改进进行单阶段多边框目标检测方法

    针对单阶段多边框目标检测( SSD)模型在以高交并比(IoU)评估平均检测精度(mAP)时出现的精度下降问题,提出一种使用卷积操作构建的循环特征聚合模型。该模型以SSD模型为
    发表于 12-12 11:49 4次下载
    如何使用基于<b class='flag-5'>转</b><b class='flag-5'>置</b>卷积<b class='flag-5'>操作</b>改进进行单阶段多边框目标检测方法

    一篇文章搞定CNN卷积

    在CNN中,卷积是一种上采样(up-sampling)的方法。如果你对转卷积感到困惑,那么就来读读这篇文章吧。
    的头像 发表于 01-31 17:32 4669次阅读

    PyTorch教程14.10之卷积

    电子发烧友网站提供《PyTorch教程14.10之卷积.pdf》资料免费下载
    发表于 06-05 11:11 0次下载
    PyTorch教程14.10之<b class='flag-5'>转</b><b class='flag-5'>置</b>卷积