[運算] 給定區間分組

看板MATLAB作者 (攸藍)時間11年前 (2013/12/10 15:59), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/1
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
hist
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)
文章代碼(AID): #1IfidlWz (MATLAB)
文章代碼(AID): #1IfidlWz (MATLAB)