通過數據歸一化提高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值最大的點並重組爲集合

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章