24小时热门版块排行榜    

查看: 1565  |  回复: 7

wanldcr

木虫 (正式写手)

[求助] 如何用一个矩阵的每一个元素乘以另一个矩阵?(不适用循环) 已有2人参与

如题,我想进行类似于如下的操作:
a=rand(3);b=rand(3);
for i=1:3
    for j=1:3
    d(i,j)=sum(sum(b(i,j)*a));
    end
end
用for循环很容易实现,但我要用的a和b都很大,循环算的非常慢,有什么好的办法达到这个目的?
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

人在江湖混,遇事要镇定,让子弹再飞一会
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

nagami

木虫 (正式写手)

根据矩阵A,B的结构,进行分块求逆,对特殊的分块进行特殊的乘法;
这个只能特殊问题,特别分析对待了
女靠衣装;男靠金装
2楼2014-12-18 17:58:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

王者归来.

木虫 (职业作家)

【答案】应助回帖

感谢参与,应助指数 +1
没看明白什么意思,,
    d(i,j)=sum(sum(b(i,j)*a));
意思是d(i,j)=b(i,j)*sum(sum(a))?

[ 发自手机版 http://muchong.com/3g ]
3楼2014-12-19 03:33:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wanldcr

木虫 (正式写手)

引用回帖:
2楼: Originally posted by nagami at 2014-12-18 17:58:33
根据矩阵A,B的结构,进行分块求逆,对特殊的分块进行特殊的乘法;
这个只能特殊问题,特别分析对待了

能否给个简单的例子?说的比较抽象,不是很懂。
人在江湖混,遇事要镇定,让子弹再飞一会
4楼2014-12-19 15:12:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wanldcr

木虫 (正式写手)

引用回帖:
3楼: Originally posted by 王者归来. at 2014-12-19 03:33:33
没看明白什么意思,,
    d(i,j)=sum(sum(b(i,j)*a));
意思是d(i,j)=b(i,j)*sum(sum(a))?

不用管这个sum函数,我是想让b中每一个元素都与a相乘,组成新的矩阵。
人在江湖混,遇事要镇定,让子弹再飞一会
5楼2014-12-19 15:15:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

baobiao007

木虫 (职业作家)

中国特色

楼主这个问题可不简单,我用parfor进行并行测试了下,略有提高但不明显,估计楼主也不会满意这一丁点的改善。当然用更高级的并行方法应该会有更好的效果吧,但我也不会。

一般来讲,空间与时间在算法上是一对矛盾,越快的算法必然消耗内存越大。。如果你的矩阵真的很大的话,可能要注意matlab能否吃得消? 如果是64位的系统,那就没关系了。
如何用一个矩阵的每一个元素乘以另一个矩阵?(不适用循环)
360软件小助手截图20141219154701.png

我同意叔本华的观点,人们投身艺术和科学领域的强烈愿望之一就是逃离痛苦、残酷和枯燥无味的现实生活,逃离自己飘忽不定的七情六欲的桎梏。--爱因斯坦
6楼2014-12-19 15:56:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

baobiao007

木虫 (职业作家)

中国特色

我感觉这个问题的本质就是要减少做乘法的次数,否则提速效果不会很明显
我同意叔本华的观点,人们投身艺术和科学领域的强烈愿望之一就是逃离痛苦、残酷和枯燥无味的现实生活,逃离自己飘忽不定的七情六欲的桎梏。--爱因斯坦
7楼2014-12-19 16:01:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

gordonmo

金虫 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
不知道我有没有正确理解楼主的问题,如果正确的话,这个问题在我看来很简单啊:
d=sum(sum(a)).*b
搞定
其中,sum(a)是一个行向量(或列向量,不太确定),sum(sum(a))就是a的所有元素之和,再和b相乘,就是b的每个元素和a的总和相乘。
8楼2014-12-19 16:07:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 wanldcr 的主题更新
信息提示
请填处理意见