[運算] 給定區間分組
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)
推
12/10 16:58, , 1F
12/10 16:58, 1F
感謝回答,後來發現是histc就有我要的了。
[~, group]=histc(data, -4:4);
※ 編輯: celestialgod 來自: 36.238.196.76 (12/10 17:37)
※ 編輯: celestialgod 來自: 36.238.196.76 (12/10 17:37)
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章