在matlab中找到一组数据的中位数,然后找到该数据的平均值

时间:2013-10-18 15:00:28

标签: matlab matrix mode mean

我正在尝试输入如下:

StarT:
2141865 16
2141865 17
2141865 17
2141865 16
2141865 17
2141865 20
2141865 9
2141865 7
2141865 19
2141865 18
2141865 19
2141865 9
2141865 9
2141865 9
2141865 9
2301367 11
2301367 21
2301367 12
2301367 10
2301367 10
2301367 11
2301367 10
2301367 10
2301367 19
2301367 12
2301367 19
2301367 10
2301367 10
2301367 18
2301367 23
2308980 16
2308980 17

进入matlab并找到第二列相对于第一列的中位数作为索引(匹配数据集)。我还需要在某些条件下取这组数据的平均值,例如如果原始值在某个范围内(1.5 *或更大),那么它必须将原始值调整为1.5 *更大或更小(取决于它与模式之间的差异)。我尝试了以下代码,它给了我近似的结果,但不完全是我需要的: (我没有以下代码设置来计算平均值,因为在模式正确之前我无法弄清楚如何去做)

function Mode_Koi_2

StarData = evalin('base', 'StarP');

global medians;

[medians, ~, Groups] = unique(StarData(:,1),'stable');
medians = [medians, accumarray(Groups, StarData(:,2), [], @median)];


end

现在我只需要一个循环或准确函数来比较'medians'中的中值与'StarP'中相应ID的原始值,然后在需要时调整它们(如果值为原始数据如上所述更小或更大,然后找到StarP的平均值。

1 个答案:

答案 0 :(得分:2)

[medians, ~, Groups] = unique(StarT(:,1),'stable');
medians = [medians, accumarray(Groups, StarT(:,2), [], @median)]

结果

medians =

     2141865           9
     2301367          10
     2308980          16