寻找一维数据的中心
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;
建议的算法:
可选择过滤数据:3 的中值、低通等
求平均值:Avg
查找高于 Avg
的值的平均指数:Center_index
。
取 Center_index
附近的几个“高于”的平均值。
假设我有数据: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;
建议的算法:
可选择过滤数据:3 的中值、低通等
求平均值:
Avg
查找高于
Avg
的值的平均指数:Center_index
。取
Center_index
附近的几个“高于”的平均值。