看板 MATLAB 關於我們 聯絡資訊
※ 引述《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
jamesweb3:其實我要inv(temp)*Wuo, 參考過好像\比較適合 04/29 22:18
jamesweb3:但是仍然很慢...... 04/29 22:18
profyang:恩...反矩陣除非你矩陣形式特殊 不然真的無法 04/29 22:51
jamesweb3:那~我可以用matlab平行運算嗎? 04/29 23:01
jamesweb3:可是,我很怕ram會爆掉~ 現在跑一個run有時接近100% ram 04/29 23:02
profyang:這我就不清楚了@@沒用過 04/29 23:31
iHakka:如果你有可以支援cuda的卡的話可以下載gpumat來平行 04/29 23:35
iHakka:理論上的平行效率會比matlab內建的還要好,不過有時候用gpu 04/29 23:35
iHakka:反而會比用CPU還要慢。如果改用cuda語言的話可以真的快很多 04/29 23:36
iHakka:缺點是程式要在自己寫... 04/29 23:36
iHakka:不過不過你的矩陣這麼大GPU的記憶體應該裝不下會比麻煩 04/29 23:40
profyang:阿不好意思 第一題我有點看錯你的意思 應該改成這樣: 04/30 00:10
profyang:rowsum_m(:,1:4000) = rowsum(:,ones(4000)); 04/30 00:12
profyang:雖然上面板友說的repmat應該是比較general的作法 但是以 04/30 00:12
profyang:你這邊二維矩陣的情況來說我這樣會稍快一點 04/30 00:13
profyang:又打錯= = ones(1,4000) 04/30 00:13
jamesweb3:謝謝你的回答:) 04/30 15:31
jamesweb3:可以問說,用cuda的畫記憶體問題怎麼解決嗎? 05/01 14:34