2017-04-11 100 views
0

在Matlab中,我想將數據合併到給定值的分箱中。在Matlab中,將數據合併到給定值的分箱中

例如,假設我有以下數據

data = [rand(50,1) rand(50,1)*10]; 
data = sortrows(data,2); 

這裏,第一列是y值,第二列爲x的數據。例如,現在我想爲y的數據的平均值(和四分位數)計算例如值爲3的x的bin。

我認爲這是我如何處理1的垃圾箱,但如果我想要價值n的垃圾箱呢?

m = accumarray(floor(data(:,2))+1, data(:,1), [], @mean); 
l = accumarray(floor(data(:,2))+1, data(:,1), [], @(x) quantile(x,.25)); 
u = accumarray(floor(data(:,2))+1, data(:,1), [], @(x) quantile(x,.75)); 

所以數據應該是4列的矩陣:平均值,下限值,上限值和分檔。爲值3箱的第4列是:0 3 6 9 ...

我不認爲這是正確的:

result = [m l u (0:numel(m)-1).']; 

回答

1

由以下(剛分裝的第一個輸入accumarraydata(:,2)通過n):

floor(data(:,2)/n)+1 

最後一列是

(0:n:max(data(:,2))).' 
2

我創建了一個小型的內聯函數來解決這些問題:

binFun  = @(fun,data,bins) cellfun(@(val) fun(data(ismember(bins,val))), num2cell(unique(bins))); 

用法:

m = binFun(@mean,round(data(:,2)),data(:,1)); 
相關問題