作者profyang (prof)
看板MATLAB
标题Re: [问题] MATLAB对於大型反矩阵及大型矩阵的运算
时间Mon Apr 29 22:15:11 2013
※ 引述《jamesweb3 (James)》之铭言:
: 这个问题困扰我很久了~
: 由於实验的需要,我必须操作大型的矩阵
: 其中以下2个步骤相当缓慢,不知道有没有人可以帮我解决:(
: 1.我的矩阵(A)约要40000*4000这麽大,建造方式是每一个row都是相同的值
: 而这个值就是某个已经建好的vector(B)决定,因此我想到用"回圈"
: for i = 1:S
: rowsum_m(i,1:1:4000) = rowsum(i);
: end
: 结果,回圈在MATLAB相当慢!!!有没有好的解决方式?
rowsum_m = rowsum(ones(40000,1),:);
: 2.其中一个步骤需要算反矩阵(temp),导致结果非常非常慢~不知道有什麽问题
: 这个矩阵的大小在40000*40000左右
: 我要计算的是: p1 = (1-alpha)*(1-beta)*(temp\Wuo);
你在matlab里面就已经是这样打的吗? 还是你打的是inv(temp)*Wuo?
两者速度有差 一个是用LU 一个是真的去求反矩阵
但这种反矩阵的问题其实真的没什麽办法了...除非你是带状
但你应该显然不是= =
: 所以,需要有inv(temp), 我不知道怎麽样可以快一点
: 一次大多许一小时以上
: =========================
: 烦请知道的朋友告诉我
: 我会感激不尽!!
: 谢谢
--
正妹也只不过是一组物质波方程的特解罢了(  ̄ c ̄)y▂ξ
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.247.141
1F:推 jamesweb3:其实我要inv(temp)*Wuo, 参考过好像\比较适合 04/29 22:18
2F:→ jamesweb3:但是仍然很慢...... 04/29 22:18
3F:→ profyang:恩...反矩阵除非你矩阵形式特殊 不然真的无法 04/29 22:51
4F:推 jamesweb3:那~我可以用matlab平行运算吗? 04/29 23:01
5F:→ jamesweb3:可是,我很怕ram会爆掉~ 现在跑一个run有时接近100% ram 04/29 23:02
6F:→ profyang:这我就不清楚了@@没用过 04/29 23:31
7F:→ iHakka:如果你有可以支援cuda的卡的话可以下载gpumat来平行 04/29 23:35
8F:→ iHakka:理论上的平行效率会比matlab内建的还要好,不过有时候用gpu 04/29 23:35
9F:→ iHakka:反而会比用CPU还要慢。如果改用cuda语言的话可以真的快很多 04/29 23:36
10F:→ iHakka:缺点是程式要在自己写... 04/29 23:36
11F:→ iHakka:不过不过你的矩阵这麽大GPU的记忆体应该装不下会比麻烦 04/29 23:40
12F:→ profyang:阿不好意思 第一题我有点看错你的意思 应该改成这样: 04/30 00:10
13F:→ profyang:rowsum_m(:,1:4000) = rowsum(:,ones(4000)); 04/30 00:12
14F:→ profyang:虽然上面板友说的repmat应该是比较general的作法 但是以 04/30 00:12
15F:→ profyang:你这边二维矩阵的情况来说我这样会稍快一点 04/30 00:13
16F:→ profyang:又打错= = ones(1,4000) 04/30 00:13
17F:推 jamesweb3:谢谢你的回答:) 04/30 15:31
18F:推 jamesweb3:可以问说,用cuda的画记忆体问题怎麽解决吗? 05/01 14:34