我正在尝试输入,例如:
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
现在我只需要一个循环或 accumarray 函数来比较“median”中的中值与“StarP”中相应 ID 的原始值,然后在需要时调整它们(如果原始数据的值如上所述更小或更大),然后找到 StarP 的平均值。