在Matlab中,将数据组合到给定值的区间中

时间:2017-04-11 12:11:32

标签: matlab

在Matlab中,我想将数据组合到给定值的区间中。

例如,假设我有以下数据

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

这里,第一列是y值,第二列是x数据。现在我想取y值的平均值(和四分位数)作为值的x的二进制数,例如3。

我认为这就是我为1的箱子做的,但是如果我想要有价值的箱子呢?

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列的矩阵:mean,lower,upper和bin。值为3的二进制位的第四列将是:0 3 6 9 ...

我不认为这是正确的:

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

2 个答案:

答案 0 :(得分:2)

我创建了一个小的内联函数来解决这些问题:

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

用法:

m = binFun(@mean,round(data(:,2)),data(:,1));

答案 1 :(得分:1)

将第一个输入替换为accumarray以下(仅data(:,2)除以n):

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

最后一栏是

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