[問題] 如何改善來加快運算速度

看板MATLAB作者 (**承晏**)時間12年前 (2013/04/14 20:45), 編輯推噓6(609)
留言15則, 6人參與, 最新討論串1/3 (看更多)
我手邊有兩筆資料,我必須按照資料二所要求的編號,取出相對應資料一編號的值, 也就是如下所示的a、c、d... data_r3: data_d1: 編號 數值 編號 1 a 1 2 b 3 3 c 4 4 d 7 5 e 10 6 f . 7 g . 8 h . . . . 目前我使用的方法是用兩個for loop去跑,如下所示: u_picked = zeros(0); for i=1:row_total for k=1:row_r3 if data_r3(k,1)==data_d1(i,1) add = data_r3(k,2); u_picked = [u_picked;add]; end end end 但是資料滿龐大的,需要滿長的計算時間,因此想請問有沒有方法可以改善?? 另外一個小問題,我有兩個矩陣,A:n*m、B:n*1,如何將A的每一列都加上B的值?? 由於觸碰matlab不久,還不是很熟悉,還要麻煩高手指點!!感恩!!o(_"_)o -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.218.170 ※ 編輯: ken780713 來自: 140.112.218.170 (04/14 20:46)

04/14 20:50, , 1F
無法理解 data_r3(k,10) 是什麼東西
04/14 20:50, 1F
噢!抱歉 因為原資料裡面我要取的值在第10列,我已經修改了~ 感謝!! ※ 編輯: ken780713 來自: 140.112.218.170 (04/14 20:52)

04/14 21:15, , 2F
data_r3裡面的編號都跟index一樣?
04/14 21:15, 2F
類似 由於實際資料第一行另有意義,所以r3裡的編碼(第一列)跟index就差1這樣! ※ 編輯: ken780713 來自: 1.171.59.136 (04/14 21:21)

04/14 21:24, , 3F
或許可以這樣嘗試..
04/14 21:24, 3F

04/14 21:24, , 4F
for i=1:row_total
04/14 21:24, 4F

04/14 21:24, , 5F
試試find指令?
04/14 21:24, 5F

04/14 21:26, , 6F
  add = data_r3( 1+data_d1(i,1) , 2);
04/14 21:26, 6F

04/14 21:26, , 7F
u_picked=[u_picked;add];
04/14 21:26, 7F

04/14 21:26, , 8F
end
04/14 21:26, 8F
感謝nilson這樣似乎是可以拆解一個for loop peter Find指令我研究看看,謝謝提醒Orz!! ※ 編輯: ken780713 來自: 140.112.218.170 (04/14 21:38)

04/14 23:23, , 9F
intersect ?
04/14 23:23, 9F

04/14 23:59, , 10F
如果確定data_d1的編號 在data_r3。都有可用dsearchn
04/14 23:59, 10F

04/15 00:01, , 11F
a_indx=dsearchn(data_r3(:,1),data_d1);
04/15 00:01, 11F

04/15 00:04, , 12F
u_picked =(a_indx:1);
04/15 00:04, 12F

04/15 00:05, , 13F
更正:u_picked =data_r3(a_index:1);
04/15 00:05, 13F

04/15 01:22, , 14F
[A,B]
04/15 01:22, 14F

04/15 18:39, , 15F
再更正 u_picked =(a_indx,2);
04/15 18:39, 15F
文章代碼(AID): #1HQgJQ5p (MATLAB)
文章代碼(AID): #1HQgJQ5p (MATLAB)