[已解决] 如何只算两矩阵相乘的对角线元素

[复制链接]
JLU_xiaobo 发表于 2014-3-22 17:55:34
     是酱紫的,做数据处理。。。。我要提取一个32万行16列的矩阵A与一个16行32万列的矩阵B的乘积的对角线元素,如果直接算所有元素,太费时间了。用什么指令可以让matlab只算出对角线元素?
ps:是只算对角线元素后提取,而不是算出整个矩阵后提取;另外,我也会for i=320000 A[:,i].*B[i,:]这样子写,但是我隐隐的觉得应该还有更简便的方法。。。。。求大神赐教,谢过!     32位2012a    32位win7

最佳答案


winner245 发表于 2014-3-22 18:40:49
如果内存不溢出,你可以用下面的办法:

sum(A.*B.',2)
回复此楼

5 条回复


winner245 发表于 2014-3-22 18:40:49
如果内存不溢出,你可以用下面的办法:

sum(A.*B.',2)
回复此楼

JLU_xiaobo 发表于 2014-3-23 08:06:24
winner245 发表于 2014-3-22 18:40
如果内存不溢出,你可以用下面的办法:

sum(A.*B.',2)

不对啊。。。我只需要对角线元素,您这是求了个行和啊~

winner245 发表于 2014-3-23 08:08:27
JLU_xiaobo 发表于 2014-3-23 08:06
不对啊。。。我只需要对角线元素,您这是求了个行和啊~

你不是要取出 A*B 后所得的矩阵的对角线上所有元素吗?

winner245 发表于 2014-3-23 08:16:45
JLU_xiaobo 发表于 2014-3-23 08:06
不对啊。。。我只需要对角线元素,您这是求了个行和啊~

你最好仔细看我的代码。你是要求 A*B 得到一个32万行*32万列的矩阵的所有对角元素,也就是让 A 的第 i 行与 B 的第 i 列求内积,一共得到32万个标量。如果是这样的话,2L 程序得到的就是你要的结果。

不过,你目前的循环写法有错误,应该是 A(i,:)*B(:,i)

JLU_xiaobo 发表于 2014-3-23 08:32:24
winner245 发表于 2014-3-23 08:16
你最好仔细看我的代码。你是要求 A*B 得到一个32万行*32万列的矩阵的所有对角元素,也就是让 A 的第 i 行 ...

对,对,对!您是对的,我刚接触matlab,对*和.*理解不深,刚才一试才彻底明白*是直接*,.*是对应元素*。谢过~另外有帖子专门讲()和[]的区别和练习的么?我对这个还欠缺理解~再谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表