[討論] 分組求平均問題

看板MATLAB作者 (澄)時間6年前 (2018/12/07 23:14), 6年前編輯推噓2(202)
留言4則, 1人參與, 6年前最新討論串1/1
我的問題是我有一組data如下 Record_ProEst_P_and_ASR = [0.2 0.5 0.6 0.6 0.5 0.8 0.9 0.5] 想利用data第一行資料分組 例如分組區間為interval = [0, 0.01, 0.21, 0.41, 0.61, 0.81, 1] 之後判斷在data(1,:)落於 0~0.01、0.01~0.21、0.21~0.41、0.41~0.61、0.61~0.81內的data第二行資料平均 也就是會得到[0, 0.5, 0, 0.7, 0, 0,5] 我目前的寫法如下 average_Record_ASR = zeros(length(interval)-1,1); sum_Record_ASR = []; for i = 1:length(interval)-1 for j = 1:length(Record_ProEst_P_and_ASR) if Record_ProEst_P_and_ASR(j,1) >= interval(i) & Record_ProEst_P_and_ASR(j,1) < interval(i+1); sum_Record_ASR = [sum_Record_ASR, Record_ProEst_P_and_ASR(j,2)]; average_Record_ASR(i,1) = sum(sum_Record_ASR)/length(sum_Record_ASR); end end sum_Record_ASR = []; end 但這樣寫法等於是每個區間都要判斷一次數列, 當我的data有10^8筆的時候, 就跑超久的 不知道有沒有更好的辦法 有想說先將data進行排序,然後判斷過的不要在判斷 但實在想不出來QQ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.233.126.107 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1544195697.A.162.html

12/08 04:12, 6年前 , 1F
data=Record_ProEst_P_and_ASR;
12/08 04:12, 1F

12/08 04:12, 6年前 , 2F
[~,~,subs]=histcounts(data(:,1),interval);
12/08 04:12, 2F

12/08 04:12, 6年前 , 3F
accumarray(subs,data(:,2),[length(interval)-1 1],@mean)
12/08 04:12, 3F
感謝s大 這問題已經困擾了我幾天了 沒想到有更快的指令QQ~~ ※ 編輯: jenny33377 (140.134.166.85), 12/08/2018 17:13:14

12/09 01:01, 6年前 , 4F
hiscounts 可以考慮用discretize代替
12/09 01:01, 4F
文章代碼(AID): #1S2evn5Y (MATLAB)
文章代碼(AID): #1S2evn5Y (MATLAB)