主頁 > 軟體工程 > 大量資料繪圖,如何提高速度!!!!!!!!!!!!!!!!!

大量資料繪圖,如何提高速度!!!!!!!!!!!!!!!!!

2020-09-24 22:50:28 軟體工程

陣列中有幾百萬個點, 連成曲線繪圖,要放大、縮放,如何能提高繪圖速度?????,對于常規解析度下的曲線顯示,當點數遠遠超過解析度像素時,有很多曲線點是完全無法表達出來的。如果全都繪制出來會很慢,能不能取大量資料點中的特征點繪制,原則是盡量不影響曲線的大致形狀。怎么實作啊?前提是還不能影響我的放大、縮小曲線功能!!!!!!!!!!!!!!!最好有具體的代碼謝謝了

uj5u.com熱心網友回復:

只有在記憶體中操作是最快的,至于幾百萬個點,我沒有敢想會是個什么情況,不過可以給你個記憶體中繪圖再顯式大圖片上的例子,興許對你有幫助:
http://download.csdn.net/detail/veron_04/2368159

uj5u.com熱心網友回復:

vb繪幾百萬個點也最多也就十幾秒鐘,不過這幾百萬個點繪成的曲線擠在一屏還有什么特征可言,都成面了。
每一次繪圖應該只繪視窗能顯示的點數,也即不超過視窗的ScaleWidth,至于放大縮小,只需改變ScaleWidth的值即可,用不著你處理.

uj5u.com熱心網友回復:

1.大量增加CPU和GPU的核數;
2.大量增加記憶體和顯存的G數.

uj5u.com熱心網友回復:

另外,想在放大和縮小時不影響影像質量,得用矢量圖形.

uj5u.com熱心網友回復:

分級顯示,縮小時細節不顯示,放大顯示區域細節

uj5u.com熱心網友回復:

哪位高手能說的具體點么?最好有代碼,謝謝了.
資料如
時間(小時)  溫度
0.00027778    16.381 
0.00055556    17.488 
0.00083333    19.560 
0.00111111    25.624 
0.00138889    36.682 
0.00166667    23.740 
0.00194444    16.797 
......
在文本里有百萬行,怎么才能提高速度啊,繪制使螢屏解析度有限,肯定有很多重復的點,如何才能只畫不重復的點,這樣就可以不改變圖形的形態,但怎么實作才能速度快請高手指點

uj5u.com熱心網友回復:

這么大的資料量,取特征資料是關鍵,而不是全畫.

按照LS給的資料,我考慮應該這樣做.
大約1秒1個資料,那么首先考慮橫坐標的劃分,橫坐標以1分鐘計.10個小格就是每6個資料的均值畫點.
畫滿大約是1000個小格就是100分鐘的資料圖,基本可以連貫起來,而且資料真實.

如果怕資料失真,可以加入放大縮小功能.總之,畫前要先自動計算螢屏需要重繪的點數,然后再求值畫點,比一股腦全畫上去速度高,可看性強。

另外ls說到文本中的資料,處理起來就有些麻煩了,不如資料庫方便。

uj5u.com熱心網友回復:

我是個初學者,希望大家指教,取特征資料最好最快的演算法是什么,謝謝了?給我寫的更詳細點吧

uj5u.com熱心網友回復:

可把資料按時間等分為若干段(段數肯定要小于能顯示的點數),每一段取其平均值(或中位數)作為該段的代表(特征,不用極值,因為一段內會有很多極值),繪出曲線即可,這樣可基本保留圖形的特征,你大可不必糾結于圖形的某些時段會出現高峰或低谷,想想誰能從幾百萬個點中找到高峰或低谷?即使想看更多細節也可通過放大圖形得到。

圖形的放大與縮小:由上面的繪制方法,只需改變段的長度(如一天改為一小時,一秒改為十分鐘)即可實作圖形的放大與縮小。

uj5u.com熱心網友回復:

我想按溫度資料的大小來找特征點,這怎么實作啊?有什么好的演算法?謝謝大家指教

uj5u.com熱心網友回復:

我覺得樓主作為一個初學者就不要一下子塞太多東西.
還是先回頭去實作那個最初的目標吧:
假設你的Picture控制元件寬度是1000個像素, 要如何最有效率地將百萬個資料描上去?
其實你也看出來了, 這么密集的資料, 點和點之間連不連線已經是無關緊要的事了.
而且你肯定也發現了, 要把所有資料都畫上去是沒有意義的.
所以剩下的就是如何挑選資料的事了.

這個和VB也好C也好, 其實關系都不大, 純粹是數學或思路方面的事情了.
所以樓主可以自己解決吧.

uj5u.com熱心網友回復:

參考 11 樓 phghbcs8888 的回復:
我想按溫度資料的大小來找特征點,這怎么實作啊?有什么好的演算法?謝謝大家指教


至于"特征點", 你把任何一個股票一年的變化曲線壓到一屏顯示, 還能從上面辨別出每一天的"特征"么?  更何況你的資料壓縮比遠大于這個. 

別人的思路不見得適合你的問題, 還是小馬過河吧.

uj5u.com熱心網友回復:

我想用位圖法實作重復資料不顯示,怎么實作啊,請高手指點

uj5u.com熱心網友回復:

參考 14 樓 phghbcs8888 的回復:
我想用位圖法實作重復資料不顯示,怎么實作啊,請高手指點

你想得也太多了點,不就是一條曲線,搞得這么復雜。
1、寫記憶體DC位圖只是在機器性能的確不能滿足的情況下才會考慮,重要的是演算法,否則就是直接寫屏也不會快。
2、關于特征,特征只是一個相對概念,拿你的溫度采集資料來說,若一分鐘采集一次,則這個資料就只是這一分鐘的特征,若一天一次,則這個資料就是一天的特征,溫度與時間本身是一個連續函式,你采集到的資料盡管間隔很小,但并不能代表就是溫度變化的曲線,只能是一種近似,所以你的資料已經是溫度曲線的“特征”了,你還要怎樣的特征?同樣的,你把現有資料任意等距拿出一部份,或者一段時間內的多個資料的平均值、中位數等,都可以作為“特征”。(注:初中數學統計:平均值、中位數、眾數可以作為資料的代表
3、重復資料不顯示,資料里有“重復資料”本身就是資料的一個特征,你不畫,不就丟了這個特征?應該說,若一段時間內的重復資料比較多,那你就取這段時間的眾數作為這段時間的“特征”就是了。

最后,人眼能看到最多不會超過螢屏的寬度,最多也就一兩千個點,用效率最慢的PSet來畫都已經足夠了,你要做的,就是每次畫圖時選出這些點。

uj5u.com熱心網友回復:

參考 7 樓 phghbcs8888 的回復:
哪位高手能說的具體點么?最好有代碼,謝謝了.
資料如
時間(小時)  溫度
0.00027778    16.381 
0.00055556    17.488 
0.00083333    19.560 
0.00111111    25.624 
0.00138889    36.682 
0.00166667    23.740 
0.001944……

最簡單的辦法:

定義一個值A,這個值代表物理界面上最多能顯示的溫度點的數量,比如1000,超過此值的話顯示的相鄰點已經在物理上是同一像素點了,再顯示就是無意義,白費CPU與記憶體等硬體資源.

然后繪圖時,肯定會有一個顯示范圍,是所有資料都顯示呢,還是只顯示某些天之內的資料.

顯示范圍確定后,就能得到這個范圍內的原始資料數量,這里假設你要顯示所有資料,就是從0到1000000.

那么,由于物理界面上最多只能顯示A個溫度點,因此只需要每隔1000000/(1000000-A)取一個溫度點顯示出來就行了.

這樣,無論何時只有A個溫度點在顯示,速度無論如何也不會慢啦.

uj5u.com熱心網友回復:

如果我的溫度資料瞬時變化比較大從15一下變到120,又從120變到30,這樣如何每隔多少點取就能把這種特征點漏掉,在曲線上就看不到這幾個點的波動,還是要找到曲線特征點才行啊,謝謝了大家了,哪位高手再給指點一下,有更好的演算法嗎,我的繪圖范圍是所有資料都顯示.請高手指點

uj5u.com熱心網友回復:

你可以做一些試驗,先不要考慮效率問題

1,全畫出來
2,每隔一個點畫一個
3,每隔5個點畫一個
4,每隔10個點畫一個

先看看這些有什么區別,自己有個清晰直觀的認識

然后你可以對于這些資料作一些區間分析,如果你畫圖的單位是twip那么差不多15個twip=1個像素,你可以看看如果前后兩個點相差不足5的話就去掉?

uj5u.com熱心網友回復:

如果我的溫度資料瞬時變化比較大從15一下變到120,又從120變到30,這樣如果每隔幾點取一點就會把這種特征點漏掉,在曲線上就看不到這幾個點的波動,還是要找到曲線特征點才行啊,謝謝了大家了,哪位高手再給指點一下,有更好的演算法嗎,我的繪圖范圍是所有資料都顯示.請高手指點

uj5u.com熱心網友回復:

資料可以處理后在繪制,比如連續10個資料求個平均值,作為一個有效資料。實際上很多資料處理都是如此的。

uj5u.com熱心網友回復:

高手們能說的更詳細一點么?我是個初學者,不好意思了。最好有詳細的演算法和代碼

uj5u.com熱心網友回復:

參考 19 樓 phghbcs8888 的回復:
如果我的溫度資料瞬時變化比較大從15一下變到120,又從120變到30,這樣如果每隔幾點取一點就會把這種特征點漏掉,在曲線上就看不到這幾個點的波動,還是要找到曲線特征點才行啊,謝謝了大家了,哪位高手再給指點一下,有更好的演算法嗎,我的繪圖范圍是所有資料都顯示.請高手指點

更好的演算法可求函式的導數(差商)、二階導數(二階差商),就怕CPU傷不起

uj5u.com熱心網友回復:

參考 樓主 phghbcs8888 的回復:
陣列中有幾百萬個點, ……對于常規解析度下的曲線顯示,……

假定要顯示資料1百萬,用于顯示的區域寬度為 1000,則每列像素要表示 1000000 / 1000 = 1000 個點。
即 1 個 X 有 1000 個 Y,這樣的繪圖只能用統計的方式:
對這 1000 個資料分別求最大值、最小值、平均值;共 1000 組資料。

最后的繪圖就是最大值、最小值、平均值 3 條曲線,每條 1000 個折點。

uj5u.com熱心網友回復:

參考 7 樓 phghbcs8888 的回復:
哪位高手能說的具體點么?最好有代碼,謝謝了.
資料如
時間(小時)  溫度
0.00027778    16.381 
0.00055556    17.488 
0.00083333    19.560 
0.00111111    25.624 
0.00138889    36.682 
0.00166667    23.740 
0.00194444    16.797 ……

如果不要求一次全部顯示出來,就不要全部畫。還有,你的這些點差距都很小,你可以選擇每隔3個點甚至更多地取一個繪圖點,這樣100萬個資料只有33萬個繪圖點,這樣就快了。每兩個繪圖點之間用Line方法畫線,就是用折線圖代替很精確的曲線圖,因為兩個點之間間距小,看不出來的,既然看不出來,你畫那么多也沒意義。只有在放大的時候,你算好放大多少倍的時候,兩個繪圖點之間的差距足夠遠,必須要把中間省略的點繪上,你再畫中間省略的點。

uj5u.com熱心網友回復:

樓主,問題最后解決了么,采取什么樣的辦法,分享分享!

uj5u.com熱心網友回復:

只繪制看得見和看得清的像素點。

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/121732.html

標籤:VB基礎類

上一篇:socket 異步通訊問題

下一篇:為什么這樣寫代碼還是在地圖中不能顯示出文本框輸入的兩點?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more