作者celestialgod (攸蓝)
看板MATLAB
标题[运算] 给定区间分组
时间Tue Dec 10 15:59:41 2013
data = randn(3670000,1);
我有一个区间是
-3 -2 -1 0 1 2 3
我想要把资料中小於-3分为第一组,界在-3跟-2之间分为第二组,剩下依此类推
我现在做法是 group = sum(bsxfun(@gt, data, -3:3),2)+1;
另一个做法是:
bins = -3:3;
group2 = zeros(size(data,1),1);
for k = 1:size(data,1)
i = 1;
while (data(k) > bins(i))
i = i + 1;
if i > length(bins)
break
end
end
group2(k) = i;
end
可是我的资料很大有367万笔,第一个做法吃记忆体,第二个做法则耗时
分别耗时如下:
Elapsed time is 0.049128 seconds.
Elapsed time is 2.984381 seconds.
不知道有没有人可以提供更好的方法
我已经爬过文了,还没找到类似的文章
PS: 这满像要画histogram时,要做的事情
PS2: R里面有一个函数叫做findInterval,可以做,我不知道matlab有没有类似的函数
PS3: 接下来我要做的是找到每一组最小值。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
1F:推 sunev:hist 12/10 16:58
感谢回答,後来发现是histc就有我要的了。
[~, group]=histc(data, -4:4);
※ 编辑: celestialgod 来自: 36.238.196.76 (12/10 17:37)
※ 编辑: celestialgod 来自: 36.238.196.76 (12/10 17:37)