看板 MATLAB 關於我們 聯絡資訊
第一個問題應該用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
sunev:第二個沒救,反矩陣本來就要算很久。 04/29 19:09
sunev:一個小時差不多,除非矩陣有特殊的數學結構。 04/29 19:09
iHakka:加入cuda平行計算的行列吧 04/29 21:13
jamesweb3:可以大致說一下cuda怎麼做嗎? 04/29 21:56
sunev:買張支援cuda的顯卡先 04/29 22:24