C 寻找一维数据的中心

C 寻找一维数据的中心,c,curve-fitting,gsl,C,Curve Fitting,Gsl,假设我有数据:0(或接近0)、0、0、…、1、10、52、80、100、100、100、100(暂时)、90、45、5、0、0、0…… 我想找到我的数据平台的“中心”的索引(不一定是int,我想要更高的精度) 我的第一个想法是做一个高斯拟合,但是数据在中间有一段时间是相当平坦的。所以可能是某种方形(?)拟合。我也在研究gsl最小化,但我不知道最简单的方法是什么 一个简单的方法是找到与中值对应的索引,但这只给了我1的精度。通过曲线拟合,我可以做得更好 注意:我是C语言的,可以使用GSL,但是一个通

假设我有数据:
0(或接近0)、0、0、…、1、10、52、80、100、100、100、100(暂时)、90、45、5、0、0、0……
我想找到我的数据平台的“中心”的索引(不一定是int,我想要更高的精度)

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

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

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

线的,其数组类似于您的数据:

int w[] = {0, 0, 0, 1, 10, 52, 80, 100, 100, 100, 100, 90, 45, 5, 0, 0}
…通过将x和y坐标乘以权重来计算 对于该特征,分别对x和y求和,以及 然后除以所有权重之和

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

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;
双和w=0//所有值(权重)之和
双产品wx=0//所有相应重量和位置的乘积
双wmc=0//加权平均中心
对于(int i=0;i建议的算法:

  • 可选过滤数据:中值3、低通等

  • 查找平均值:
    Avg

  • 查找高于
    平均值的平均指数
    中心指数

  • 中心索引附近的一些“以上值”取平均值


  • 如果你打算大量使用这些数据,那么可以先对其进行排序。然后,你可以简单地获取排序数组中大小为n的项目编号n/2,并获得中值。我猜不够精确。但我只是认为我可以简单地计算数据的重心……你能定义“数据平台中心”,指定所需的精度,然后相对于两个斜率,平台有多大?
    0(或接近0),
    -这意味着什么?如果这些值是整数,
    0
    就是
    0
    。是否有其他类型的平台可以获得额外的精度?平台比斜率大几倍(1到3倍).数据不是整数,随着测量的进行,总会有一些噪音。