作者olliekr (想買D2000...)
看板MATLAB
標題Re: [問題] MATLAB對於大型反矩陣及大型矩陣的運算
時間Mon Apr 29 17:41:44 2013
第一個問題應該用repmat做比較快
假定你的rowsum是40000x1的vector
rowsum_m就會是repmat(rowsum,1,4000);
也就是把rowsum沿row方向複製4000次
萬一發生記憶體不足的狀況
先依據rowsum內的數據作定義後再複製
int8、int16、single、double之類的
我以rand產生rowsum,再轉成int16
依照上述流程跑,應該可以在1秒內完成
第二個問題留給板友接力... 這方面沒什麼研究...
※ 引述《jamesweb3 (James)》之銘言:
: 這個問題困擾我很久了~
: 由於實驗的需要,我必須操作大型的矩陣
: 其中以下2個步驟相當緩慢,不知道有沒有人可以幫我解決:(
: 1.我的矩陣(A)約要40000*4000這麼大,建造方式是每一個row都是相同的值
: 而這個值就是某個已經建好的vector(B)決定,因此我想到用"迴圈"
: for i = 1:S
: rowsum_m(i,1:1:4000) = rowsum(i);
: end
: 結果,迴圈在MATLAB相當慢!!!有沒有好的解決方式?
: 2.其中一個步驟需要算反矩陣(temp),導致結果非常非常慢~不知道有什麼問題
: 這個矩陣的大小在40000*40000左右
: 我要計算的是: p1 = (1-alpha)*(1-beta)*(temp\Wuo);
: 所以,需要有inv(temp), 我不知道怎麼樣可以快一點
: 一次大多許一小時以上
: =========================
: 煩請知道的朋友告訴我
: 我會感激不盡!!
: 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 204.124.83.132
1F:推 sunev:第二個沒救,反矩陣本來就要算很久。 04/29 19:09
2F:→ sunev:一個小時差不多,除非矩陣有特殊的數學結構。 04/29 19:09
3F:→ iHakka:加入cuda平行計算的行列吧 04/29 21:13
4F:推 jamesweb3:可以大致說一下cuda怎麼做嗎? 04/29 21:56
5F:推 sunev:買張支援cuda的顯卡先 04/29 22:24