[問題] for迴圈的問題已回收

看板MATLAB作者 (小花)時間16年前 (2010/06/26 21:45), 編輯推噓2(2025)
留言27則, 6人參與, 最新討論串1/2 (看更多)
如題 如果我有一個矩陣a是已知 如果我要跑下面的演算法 for i = 1 : n for j = 1 : n if a(i,j) == 0 t(i,j) = inf else t(i,j) = o end end end 請問我的t能不要用矩陣做存取嗎? 要怎麼改呢? 因為我的矩陣a是一個sparse的矩陣 如果用sparse的格式去跑這個演算法要跑很久 如果在for前面加上a=full(a)的話就可以很快跑完 想不出來問題在哪? 麻煩大家幫幫忙 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.115.182.117

06/26 22:07, , 1F
不是很懂跟Sparse有什麼關係 不是每一次最多就2次判斷
06/26 22:07, 1F

06/26 22:28, , 2F
我原始的a是sparse的格式,如果直接用a去跑的話跑不出來
06/26 22:28, 2F

06/26 22:28, , 3F
如果把a改成full的格式就可以在二秒內跑完這段
06/26 22:28, 3F

06/26 22:30, , 4F
我原始的a是1030*1030的matrix
06/26 22:30, 4F

06/26 22:51, , 5F
如果說直接用a去跑要跑很久 可能是資料結構的問題
06/26 22:51, 5F

06/26 22:52, , 6F
要看他怎麼寫才會知道
06/26 22:52, 6F

06/26 22:54, , 7F
話說1030x1030大小的matrix跑1030x1030次的運算真的只要2秒?
06/26 22:54, 7F

06/26 23:26, , 8F
嗯嗯~~真的
06/26 23:26, 8F

06/27 01:11, , 9F
用spfun吧
06/27 01:11, 9F

06/27 01:40, , 10F
else 那邊是數字零還是字母 o 啊? @_@a
06/27 01:40, 10F

06/27 01:43, , 11F
話說用這種方式跑一定會慢的,sparse matrix 要取值是
06/27 01:43, 11F

06/27 01:43, , 12F
要在 list 裡面搜尋,看這元素是否在列表中。
06/27 01:43, 12F

06/27 01:44, , 13F
多出來的時間就是花在調出每個元素的查表上。
06/27 01:44, 13F

06/27 01:46, , 14F
t(a==0) = Inf; t(a~=0) = o; 這樣應該會快很多吧
06/27 01:46, 14F

06/27 13:14, , 15F
謝謝大家的幫忙,如果用樓上的方式,那麼我t(i,j)的index要
06/27 13:14, 15F

06/27 13:15, , 16F
怎麼出現呢?
06/27 13:15, 16F

06/27 14:14, , 17F
什麼叫做 index 出現? = =
06/27 14:14, 17F

06/27 16:26, , 18F
t(a==0) a==0時就會有index 自動幫你補 Inf
06/27 16:26, 18F

06/27 16:27, , 19F
你用一個小陣列去試看 t 就知道
06/27 16:27, 19F

06/27 17:24, , 20F
ind=find(a==0) ?
06/27 17:24, 20F

06/27 17:25, , 21F
如果想看的話
06/27 17:25, 21F

06/27 17:34, , 22F
ok了~~謝謝大家!
06/27 17:34, 22F

06/27 17:35, , 23F
另外請問大家一個問題,在matlab裡,如果是雙重迴圈的話是不
06/27 17:35, 23F

06/27 17:36, , 24F
是很浪費時間,像是 for i=2:n for k=1:i-1 這類的
06/27 17:36, 24F

06/27 17:41, , 25F
能不用迴圈就不用迴圈吧 量大的話 速度會差很多很多
06/27 17:41, 25F

06/27 19:40, , 26F
用matlab內建的語法會比較快 因為有被最佳化過
06/27 19:40, 26F

06/27 20:50, , 27F
樓上說的內建語法是說哪個語法呢?
06/27 20:50, 27F
文章代碼(AID): #1C9WID6F (MATLAB)
文章代碼(AID): #1C9WID6F (MATLAB)