作者jenny33377 (澄)
看板MATLAB
标题[讨论] 分组求平均问题
时间Fri Dec 7 23:14:55 2018
我的问题是我有一组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://webptt.com/cn.aspx?n=bbs/MATLAB/M.1544195697.A.162.html
1F:推 sunev: data=Record_ProEst_P_and_ASR; 12/08 04:12
2F:→ sunev: [~,~,subs]=histcounts(data(:,1),interval); 12/08 04:12
3F:→ sunev: accumarray(subs,data(:,2),[length(interval)-1 1],@mean) 12/08 04:12
感谢s大 这问题已经困扰了我几天了
没想到有更快的指令QQ~~
※ 编辑: jenny33377 (140.134.166.85), 12/08/2018 17:13:14
4F:推 sunev: hiscounts 可以考虑用discretize代替 12/09 01:01