WPF 通过数据归一化提高WPF绘图效率
这里不对归一化做太多介绍。
首先我们使用的都称作为特征缩放的四种方法之一,min-max normalization的算法
总体而言,缩放数据到0~1,不改变数据分布。
算法也是非常简单。
计算过程为遍历子项减去集合的最小值并除以集合的最大值-集合的最小值
因为我们是point集合所以要分别计算X,Y值,得出的值是0~1之间的值,我们可以看做是某数的百分比,所以我们可以分别乘与想要与之呈现的大小而得到在呈现大小的对应点。
以上过程还可以叫数据区间映射。
另外 因为使用的WPF,所以都是使用浮点数,在数据非常多的情况下可以通过转换为整数来滤除一些非关键数据【无科学验证,个人猜的...】
例如一千个点,通过算法并转换为整数,会减少四五百左右,不过看不出来是否改变了数据分布的..【按道理应该是又改变了】
编程很简单就不上了。
数据缩放
//转为int整数 //后置整数为要呈现的大小 private Point Normalization(Point p) => new Point ( (double)(int)((p.X - MinX) / (MaxX-MinX)*1900), (double)(int)((p.Y - MinY) / (MaxY - MinY)*200) ); //后置整数为要呈现的大小 private Point Normalization2(Point p) => new Point ( ((p.X - MinX) / (MaxX - MinX) * 400), ((p.Y - MinY) / (MaxY - MinY) * 200) );
贴一个数据筛选的东西吧
LP2 = LP.Select(x => Normalization(x)).GroupBy(x => x.X, x => x).Select(z=>z.ToList().OrderByDescending(w=>w.Y).ToList()[0]).ToList();
//源集合首先数据缩放,再根据X值分组后筛选出降序排列的点集合中Y值最大的点并重组为集合