Matlab三维数组与二维矩阵相乘问题

近来在搞一个改进近场music算法的仿真问题,用matlab进行二维搜索的时候写了很多for循环,导致运行速度极慢。考虑到matlab语言本身的矩阵运算特点,改用三维数据解决二维搜索问题,下面记录过程中遇到的一点问题与解决方法

目前我有一个三维数组A,大小为691x1801x21,一个二维矩阵U,大小为21x18,要实现的式子是
P=AH∗(U∗UH)∗AP=A^{H} *(U*U^{H})*AP=AH∗(U∗UH)∗A
实际上,P的大小是,691∗1801∗(1∗21)∗(21∗18∗18∗21)∗(21∗1)=691∗1801691*1801*(1*21)*(21*18*18*21)*(21*1)=691*1801691∗1801∗(1∗21)∗(21∗18∗18∗21)∗(21∗1)=691∗1801。和网上许多的按页相乘的三维矩阵乘法不同,这里并不是按页相乘,区别如下:
按页相乘:

而这里的乘法是

不同与按页相乘的bsxfun指令,这里其实我们可以用matlab的reshape指令来完成,下面是我操作的流程:

  1. 将A矩阵交换行列,变为21x1801x691
  2. 使用reshape指令,将A平铺为21x(1801x691)的二维矩阵
  3. 计算(U∗UH)∗A(U*U^{H})*A(U∗UH)∗A
  4. 计算结果再与AHA^{H}AH相乘,这里可以用bsxfun实现点对点的相乘

代码如下:

A=exp(GAMMA+PHI);%任意给定3维矩阵即可
A_1=permute(A,[3,2,1]);%交换行列
A_2=reshape(A_1,length(UU),length(incidence_angle)*length(distance));%平铺
U_times_A_1=UU*A_2;%相乘
U_times_A=reshape(U_times_A_1,length(UU),length(incidence_angle),length(distance));%重新组合成三维
U_times_A=permute(U_times_A,[3,2,1]);%重新交换行列
P_1=sum(bsxfun(@times,conj(A),U_times_A),3);

第一次写blog,分享一点自己的解决方法,由于时间紧张写的不太完善,有需要的可以私信相互交流

matlab三维数组与二维矩阵相乘问题相关推荐

  1. MATLAB三维数组转为二维数组(时间序列分析中很有用)

    在MATLAB中三维数组转二维的方法 一.写该程序的初衷 在处理时间序列遥感数据的时候,我之前的做法是: 将时间序列数据读取为三维矩阵: 将该数据保存为BIP格式: 在每个像元上进行循环,取出其第三维 ...

  2. matlab三维图、二维云图的可视化绘图

    matlab三维图.二维云图的可视化绘图 matlab三维图.二维云图的可视化绘图 1.meshgrid生成数据矩阵 2.可视化方案 3.shading类型 matlab三维图.二维云图的可视化绘图 ...

  3. php三维数组转换二维数组,php 三维数组转二维数组(多维数组变合拼二维数组)(foreach循环 数组叠加)...

    /*************** * @function 三维数组转二维数组 * @Param: $array : 传入参数 * @Return: $tempArr 返回结果数组 ********** ...

  4. matlab 把图像变成二维的,matlab图像怎么变成二维矩阵

    求:matlab二维直方图图像分割程序.. 我给你个网站``里面的教学很详细~~希望能帮到你~~~~反正里面的软件教程很多``就是不知道有没你要找的``如果有~~给我加分哈``http://tech. ...

  5. 【Matlab】如何对二维矩阵进行线性/非线性插值?

    1.Introduction 最近又遇到了矩阵插值(重采样)的问题,在最开始写博客的时候就写了篇关于 Excel 重采样的文章,不过在逐渐熟悉 Matlab 的过程中,还是决定看看能不能编程自动实现, ...

  6. [Matlab] matlab将三维数组转为二维数组

    在使用matlab做实验时,我遇到一个问题是将一个303012的三维数组转化成3012的数组,采用平均值的方式,在y轴上取平均 值.首先取平均值matrix = mean(matrix,1);然后si ...

  7. matlab三维数据切片二维

    三维数组,load 24*365*5 选取某一天,a=load(:,311,:) 得到24*1*5的数据 降维 方法一:b=reshape(a,[24,5]) 得到24*5二维数组 方法二:b=[a( ...

  8. matlab三维图与二维图画在一起,matlab 画二维图与三维图

    C#_技巧:计算代码块运行的时间 System.Diagnostics下类Stopwatch,给程序代码块运行计时, 利用start()和stop()方法来标记代码快. 该命名空间下还有一些其他类,可 ...

  9. Matlab比较2个 二维矩阵 或 二维图像 相似度的方法总结

    1.corr2 A = ; B = ; cor = corr2(A,B) 2.通过直方图相似性比较 (参考:https://blog.csdn.net/xiaojianzhao/article/det ...

最新文章

  1. 机器学习中的参数与非参数方法
  2. Java文件删除操作File#delete()
  3. JAVA实现可视化的xpath_Java学习之XPath
  4. 修改Visual Studio Code的自定义键盘快捷键
  5. 常用JavaScript函数 71 -(自我总结)
  6. 烟台市与拼多多达成战略合作 启动烟台优品线上云购节活动
  7. 怎么成为日上会员直邮_手把手教你玩转各大免税店直邮方法,再也不用担心真假代购...
  8. android calendarview 单月显示博客,android CalendarView
  9. localStorage、sessionStorage详解,以及storage事件使用
  10. oracle如何查找谁删除了数据_一文看懂Oracle是如何闪回数据库的?
  11. adb pull 报错处理:adb: error: cannot create file/directory 'E:\': No such file or directory
  12. win10 使用cmake编译opencv源码生成VS工程(二)
  13. 图及其应用实验报告 c语言,图的应用 实验报告
  14. 博客上云历程(二):Docker入门介绍与使用
  15. 5G NR CSI-RS介绍(4)-- CSI Report配置详解
  16. 朋友圈评论、点赞测试点
  17. axure中图表背影_Axure制作可视化图表的几种方法
  18. 法拉利虚拟学院2010 服务器,法拉利虚拟学院
  19. css中left属性,CSS left属性用法及代码示例
  20. python var是什么意思_python3函数里var是什么意思?

热门文章

  1. 【OpenCV】Windows安装OpenCV4-Python版本
  2. mysql cbo rbo_Oracle优化器(RBO与CBO)
  3. 目标检测:从overfeat到Fast R-CNN
  4. 语音信号处理入门系列(1)—— 语音信号处理概念
  5. 等离子电视工作原理(转)
  6. 三 Laya3D 加载资源 (场景/预设/模型网格/材质/动画文件/贴图/粒子)
  7. oracle数据库定期备份
  8. solidty实现默克尔树空投
  9. 一款免费、简单但超便捷的流程图绘制软件——draw.io
  10. 2017年山东省CIO智库周年庆暨信息化与工业化融合发展峰会成功召开!