寻找一维数据的中心

Finding the center of 1D data

假设我有数据:0 (or near 0), 0, 0, ..., 1, 10, 52, 80, 100, 100, 100, 100 (for a while), 90, 45, 5, 0, 0, 0... 我想找到我的数据高原 'center' 的索引(不一定是 int,我想要更精确)。

我的第一个想法是做一个高斯拟合,但数据在中心有一段时间相当平坦。所以也许某种正方形(?)适合。我也一直在研究 gsl 的最小化,但我不知道最简单的方法是什么。

一个简单的方法是找到与中值对应的索引,但这只给我精度为 1。通过曲线拟合我可以做得更好。

注意:我使用的是 C 语言并且可以使用 GSL,但是一般的数学解决方案也可以!

Weighted Mean Center 一行,数组类似于你的数据:

int w[] = {0, 0, 0, 1, 10, 52, 80, 100, 100, 100, 100, 90, 45, 5, 0, 0}

...is calculated by multiplying the x and y coordinate by the weight for that feature and summing all for both x and y individually, and then dividing this by the sum of all the weights.

因为这是一个一维数组,所以使用数组中的位置,即索引来表示位置,如下所示:

weighted mean center = sum(w[i]*i)/sum(w[i])  //for all i

在伪代码中:

double sum_w=0;//sum of all values (weights)
double prod_wx=0;//product of all corresponding weights and positions
double wmc=0; //weighted mean center
for(int i=0;i<sizeof(w)/sizeof(w[0]);i++)
{
    prod_wx += w[i]*i;
    sum_w += w[i];
}
wmc = prod_wx/sum_w;

建议的算法:

  1. 可选择过滤数据:3 的中值、低通等

  2. 求平均值:Avg

  3. 查找高于 Avg 的值的平均指数:Center_index

  4. Center_index 附近的几个“高于”的平均值。