数据阵列抽取

时间:2015-02-26 15:03:14

标签: c arrays reduce

我有一个快速变化且长度可变的阵列 - 这可能是最小值100,最大值约为5k。我将使用这些值来逐个绘制线条来生成我生成的数据列。这将类似于扫描图。

另一件事是,我有一个固定的列长度但可变的数据数组长度,所以数组的每个成员都应该适合图形。如果数据的长度小于列长度,我应该扩展更容易的数组,我这样做。但是如果数据的长度更大,我必须做一些像抽取的事情。

问题是,我应该在抽取过程中保持数组的特性。当我试图计算每N个成员的算术平均值时,图表变得更加平滑,我不想这样做。

我应该怎么做才能将这个数组放入图表中,而不改变它的特征?

图表的外观如下:http://imgur.com/KFAzaAQ

1 个答案:

答案 0 :(得分:0)

我猜你的意思是你的相关信息是尖峰的位置和它们的高度。因此,您希望在保留峰值和高度的同时重新缩放图形。

实现这一目标的一种方法是删除与其邻居具有最小值差异的数据点。您可以计算每个数据点的分数,该分数与其值与其邻居的差值成比例,并以最小分数抽取数据点。候选分数函数是差的平方和。

然后创建一个与数据向量一样大的得分向量,并为每个数据值计算得分,如下所示

score[i] = square(data[i]-data[i-1]) + square(data[i+1]-data[i]);

另一位候选人

score[i] = abs(data[i]-data[i-1]) + abs(data[i+1]-data[i]);

您还希望此抽取尽可能均匀地应用于数据,以便图形不会失真。实现此目的的一种方法是将数据拆分为存储桶,并在每个存储桶中抽取所需数量的数据点。

如果你必须删除许多数据点(N> 2),最好在多次传递中进行,每次传递都会重新计算得分。在这种情况下,你不要扭曲每个桶的内容。