数据阵列抽取
Data Array Decimation
我有一个变化迅速且长度可变的数组 - 最小值可能为 100,最大值约为 5k -。我将使用这些值来为我通过一条一条地绘制线条生成的数据列着色。这将类似于扫描图。
另一件事是,我有一个固定的列长度但可变的数据数组长度,所以数组的每个成员都应该适合图表。如果数据的长度小于列的长度,我应该扩展更简单的数组,然后我就这样做了。但是如果数据的长度更大,我必须做一些像抽取这样的事情。
问题是,我应该在抽取过程中保持数组的特性。当我试图计算每组 N 成员的算术平均值时,图形变得越来越平滑,这是我不想要的。
我应该怎么做才能使这个数组适合图形,而不改变它的特性?
图表是这样的:http://imgur.com/KFAzaAQ
我猜你的意思是你的相关信息是尖刺的位置和它们的高度。因此,您希望在保留尖峰及其高度的同时重新缩放图形。
实现这一目标的一种方法是删除与其邻居具有最小值差异的数据点。您可以为每个数据点计算一个分数,该分数与其相邻数据点的值之差成正比,并抽取分数最小的数据点。候选得分函数是差的平方和。
然后您创建一个与您的数据向量一样大的分数向量,并针对每个数据值计算其分数,如下所示
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),最好在多次传递中进行,每次传递重新计算分数。在这种情况下,您不会扭曲每个桶的内容。
我有一个变化迅速且长度可变的数组 - 最小值可能为 100,最大值约为 5k -。我将使用这些值来为我通过一条一条地绘制线条生成的数据列着色。这将类似于扫描图。
另一件事是,我有一个固定的列长度但可变的数据数组长度,所以数组的每个成员都应该适合图表。如果数据的长度小于列的长度,我应该扩展更简单的数组,然后我就这样做了。但是如果数据的长度更大,我必须做一些像抽取这样的事情。
问题是,我应该在抽取过程中保持数组的特性。当我试图计算每组 N 成员的算术平均值时,图形变得越来越平滑,这是我不想要的。
我应该怎么做才能使这个数组适合图形,而不改变它的特性?
图表是这样的:http://imgur.com/KFAzaAQ
我猜你的意思是你的相关信息是尖刺的位置和它们的高度。因此,您希望在保留尖峰及其高度的同时重新缩放图形。
实现这一目标的一种方法是删除与其邻居具有最小值差异的数据点。您可以为每个数据点计算一个分数,该分数与其相邻数据点的值之差成正比,并抽取分数最小的数据点。候选得分函数是差的平方和。
然后您创建一个与您的数据向量一样大的分数向量,并针对每个数据值计算其分数,如下所示
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),最好在多次传递中进行,每次传递重新计算分数。在这种情况下,您不会扭曲每个桶的内容。