[問題] 巢狀loop減少已回收

看板MATLAB作者 (來自異鄉= =)時間17年前 (2008/11/11 14:25), 編輯推噓4(4010)
留言14則, 5人參與, 最新討論串1/2 (看更多)
因為matlab只要跑超過2個loop就會變得很慢... for i=1:256 for j=1:256 for k=1:256 if a(j,k)==b(i,1) b(i,2)=b(i,2)+1; end end end end a矩陣:256*256 b矩陣:256*2 假設a矩陣的值等於b(,1)的值,那b(,2)則+1,有什麼方式可以縮減loop嗎? 不然單這一個loop執行就要花30s...感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.104.100

11/11 16:45, , 1F
跟上一題很像
11/11 16:45, 1F

11/11 16:59, , 2F
先把a轉成(256^2)x1 再用ismember()找到a對應b的index
11/11 16:59, 2F

11/11 17:02, , 3F
樓上的方法有試過,但是問題卡在 b(i,2)=b(i,2)+1
11/11 17:02, 3F

11/11 17:02, , 4F
我要計算出現的次數...
11/11 17:02, 4F

11/11 17:08, , 5F
知道了index再用一個上篇的方法算出每個index重覆的數目
11/11 17:08, 5F

11/11 17:16, , 6F
不過b(:,1)必須為不重覆的內容才行
11/11 17:16, 6F

11/11 18:45, , 7F
0.3911 vs. 0.0005sec 真的差很多...
11/11 18:45, 7F

11/11 21:49, , 8F
是真的差別非常多...= =所以才想有沒有方法可以縮減迴圈
11/11 21:49, 8F

11/11 22:57, , 9F
#196NUoxv的方法很不錯 記憶體應該也負荷得了 可以試試
11/11 22:57, 9F

11/12 02:12, , 10F
for i=1:size(b,1); b(i,2)=sum(sum(a==b(i,1))); end
11/12 02:12, 10F

11/12 02:50, , 11F
感謝樓上幾位提出的方法<_ _>
11/12 02:50, 11F

11/12 09:04, , 12F
我想了一下 equal(==)的語法會有問題才對 a的元素不會和
11/12 09:04, 12F

11/12 09:05, , 13F
b(:,1)的每一個元素比較 只會和同列的元素比較
11/12 09:05, 13F

11/12 09:11, , 14F
抱歉 z大的方法沒有問題的
11/12 09:11, 14F
文章代碼(AID): #196ILgw5 (MATLAB)
討論串 (同標題文章)
文章代碼(AID): #196ILgw5 (MATLAB)