声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2299|回复: 3

[编程技巧] 不同矩阵不同维度元素之间运算

[复制链接]
发表于 2007-11-13 22:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
问题:有两个矩阵a和b,他们都是N*N*N的三维方阵,现在想让a第二维和b第三维元素分别相加得到一个一维的矩阵,
即a(1,1:N,1)+b(1,1,1:N),请问该如何实现?
如果直接a(1,1:N,1)+b(1,1,1:N),系统提示 Number of array dimensions must match for binary array op.
即两个矩阵不匹配。
我知道有几种实现的方法,但是都比较麻烦,想请教一下有没有更简单的办法?
1.用循环分别计算;

2.引入两个一维的中间变量,
tpa(1:N)=a(1,1:N,1);
tpb(1:N)=b(1,1,1:N);
tpa(1:N)+tpa(1:N);

3.用permute交换维度,但同样需要引入中间变量)
Thank you!!

[ 本帖最后由 eight 于 2007-11-15 11:26 编辑 ]
回复
分享到:

使用道具 举报

发表于 2007-11-14 14:55 | 显示全部楼层
%你的第二种方法依然不行,实质和a(1,1:N,1)+b(1,1,1:N)一样
reshape(a(1,:,1),1,[])+reshape(b(1,1,:),1,[])%即可

评分

1

查看全部评分

发表于 2007-11-15 11:27 | 显示全部楼层
help squeeze,应该可以,试试吧

评分

1

查看全部评分

 楼主| 发表于 2007-11-15 17:24 | 显示全部楼层
谢谢donkeyxu 和eight  的回答。
我试了一下,donkeyxu  的方法可以得到我想要的结果,不过,我的第2种方法好像也可以得到结果。
根据eight 的提示 我试了下squeeze(a(1,:,1))+(squeeze(b(1,1,:)))'  ,也可以得到我想要的结果

[ 本帖最后由 eight 于 2007-11-15 17:36 编辑 ]
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-18 16:48 , Processed in 0.059896 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表