Deutsch
Forum

schnelle Routine für Durchschnittsbildung aus Array gesucht

 

KHR
Hallo miteinander,

.

ich möchte eine große Menge Meßdaten aufbereiten und dann als Kurve(n) darstellen. Die Daten werden aus einer Datei eingelesen und in Arrays zwischengelagert

Um stark flackernde Meßwerte in einer übersichtlichen Kurve darstellen zu können möchte ich diese über Durchschnittsbildung beruhigen Das ganze soll dann im fertigen Programm für fünf zahlenreihen gehen

Bisher mache ich das in etwas so:

Es gibt 5 arrays mit 100 elementen Float-Variablen , bei beginn mit 0 gefüllt

Ein Satz Meßwerte wird eingelesen, Jedes Array erhält ein Element eingetragen

Für jedes Array wird der Durchschnitt ermittelt,

die jeweiligen Punkte werden geplottet

und weiter geht es mit dem nächsten Datensatz Meßwerte.

Da ich bisher den Durchschnitt mit while-wend Schleifen errechne, wird alles unendlich langsam. Selbst mit Profan2cpp dauert es Minuten bis der Schirm vollgekritzelt ist.

Hier mal ein ganz kurzer Auszug der Daten wie sie vorliegen. Real haben die Dateien oft über zehn- oder gar zwanzigtausend Datensätze (Zeilen)

25.07.2007;08:22:53;1874;63.3;0.019387;0.023140;0.024151;0.022312;-----;-----
25.07.2007;08:22:54;1871;63.3;0.028538;0.022725;0.025337;0.022793;-----;-----
25.07.2007;08:22:55;1914;63.3;0.024311;0.023610;0.022366;0.022739;-----;-----
25.07.2007;08:22:56;1889;63.3;0.021887;0.023453;0.019952;0.022303;-----;-----
25.07.2007;08:22:57;1895;63.3;0.027712;0.023644;0.021144;0.022193;-----;-----
25.07.2007;08:22:58;1902;63.3;0.023383;0.023765;0.022752;0.022195;-----;-----
25.07.2007;08:22:59;1891;63.3;0.026178;0.023538;0.022319;0.022224;-----;-----
25.07.2007;08:23:00;1912;63.3;0.024255;0.023965;0.021904;0.022195;-----;-----
25.07.2007;08:23:01;1898;63.3;0.021041;0.023673;0.024442;0.022237;-----;-----
25.07.2007;08:23:02;1895;63.3;0.024243;0.023550;0.022202;0.022322;-----;-----
25.07.2007;08:23:03;1919;63.3;0.029875;0.023874;0.022494;0.022521;-----;-----
25.07.2007;08:23:04;1930;63.3;0.027768;0.024126;0.022018;0.022461;-----;-----
25.07.2007;08:23:05;1914;63.3;0.020411;0.023905;0.020469;0.022334;-----;-----
25.07.2007;08:23:06;1915;63.3;0.027465;0.023837;0.023016;0.022474;-----;-----
25.07.2007;08:23:07;1924;63.3;0.020727;0.023959;0.023631;0.022536;-----;-----
25.07.2007;08:23:08;1891;63.3;0.020876;0.023436;0.021933;0.022374;-----;-----
25.07.2007;08:23:09;1867;63.3;0.020627;0.023159;0.020591;0.022087;-----;-----
....
Die ersten beiden Spalten Datum und Zeit sind uninteressant, erst danach gehts richtig los.

Vor lauter Frust über meine Ideenlosigkeit hab ich die bisherigen Codes gelöscht
Hat da jemand ne Idee, wie so was schneller gehen könnte??

Bin halt leider doch kein Programmierer sondern nur ein Profan-Wurschtler.
 
Gruß
Karl-Heinz
WIN XP home/Pro / XPROFAN 11 / P2CPP
ATMEL + BASCOM Fan
03.06.2008  
 




Jörg
Sellmeyer
Hast Du schon mal die Listview.dll von Frank Abbing ausprobiert? Zumindest die Durchschnittsberechnung von Werten in einem Listviewcontrol geht damit in Sekundenbruchteilen.
Nochmal zum Verständnis:
Aus den horizontalen Daten benötigst Du den Durchschnitt und dieser wird dann als Graph gezeichnet?
Wenn Du 20000+ Daten zeichnen willst, ist es aber ehrlich gesagt auch ganz normal, daß das ein weilchen dauert.
Hast Du schon mal versucht, das ganze auf eine Speicherbitmap zu zeichnen und diese erst, wenn sie fertig ist, anzuzeigen?
Gruß
Jörg
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
04.06.2008  
 




KHR
Hallo Jörg

.

ich denke mit der Listview wird das nix.

Zu meinen Daten:

Jede Spalte enthält die Daten für einen Meßreihe.

Ich möchte die Daten der verschiedenen Meßreihen beruhigen

dazu muß ich dann vertikal mitteln, insgesamt 5 Meßreihen, jeweils 100 Datensätze

Bildlich gesprochen: ich schieb ein Fenster über die 100 Datensätze rechne für jede Meßreihe den Durchschnitt aus, plotte die Kurven weiter und schieb dann das Fenster einen Datensatz weiter

Das gibt ne irre Rechnerei für den PC

Die Zeit wird nicht beim plotten verloren. Ich hab mal versucht, das Programm ohne Graphikausgabe laufen zu lassen - also nur rechnen. Da war kein Zeitunterschied bemerkbar

Daher auch meine Frage, ob da jemand ne Routine vorschlägt, mit der man nicht den langen Weg gehen muß, sondern mit einer Abkürzung Zeit spart. Manchmal sieht man halt den Wald vor lauter Bäumen nicht mehr und ein Tipp von aussen bringt dann den AHA-Effekt.

.
 
Gruß
Karl-Heinz
WIN XP home/Pro / XPROFAN 11 / P2CPP
ATMEL + BASCOM Fan
04.06.2008  
 




Jörg
Sellmeyer
Hm, was heißt mit der Listview wird das nix? Mit der Funktion AddItemValues(H,S,B,A) kannst Du z.B. im Nullkommanix die Werte einer Spalte zusammenrechnen, die Du selber mühsam per Schleife erst einlesen und dann addieren müßtest. Das läuft in Assemblergeschwindigkeit ab. Ich würds an Deiner Stelle mal probieren.
Ansonsten: Einen groben Durchschnitt kannst Du bekommen, wenn Du die Daten eines Satzes in eine SortedListbox lädtst. Dann brauchst Du nur den höchsten und niedrigsten Wert addieren und teilen. Ist zwar nicht der statistische Durchschnitt, aber vielleicht hilfts Dir ja.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
04.06.2008  
 



@KHR: Stell s uns doch mal solch eine grössere Liste zur Verfügung.
 
04.06.2008  
 




Thomas
Freier
Mit dem Listview kann er den echten Mittelwert nicht ermitteln. Dass doWhile-Schleifen nicht das Schnellste ist, ist hier schon diskutiert worden. Muß der Mittelwert über eine Schleife ermittelt werden (spart natürlich Prog-Zeilen) und warum Schleifen? Für die 5 Mittlelwerte einer Zeile müsste doch eine Schleife ausreichen. Sind es immer 100 Werte für einen Mittelwert oder bis zu 100?
 
Gruß Thomas
Windows XP SP2, XProfan X2
04.06.2008  
 




Jörg
Sellmeyer
Den Mittelwert kann sie nicht ausrechnen, aber das zusammenrechnen der Werte ist blitzschnell und geteilt durch 100 sollte dann auch in Profan nicht allzu lange dauern.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
04.06.2008  
 




Thomas
Freier
@Jörg, ja, wenn er die 5x100 Werte als *.csv laden kann. Habe mal getestet: Listview1 leeren, *.csv - laden, berechnen, Werte in Listview2 schreiben. Zeit bei meinem Rechner: Schleife 100mal = 578 ms ; 1000mal = 5437 ms; 10.000mal = 53.400 ms.
Die Zeiten werden natürlich schlechter, wenn er je Spalte die Anzahl der Werte ermitteln muß.
 
Gruß Thomas
Windows XP SP2, XProfan X2
04.06.2008  
 



Es gibt dutzende Verfahren, darum nochmals die bitte um einen größeren Datensatz...

Dann können wir ja probieren die schnellste Variante zu ermitteln - da mach ich auch gerne mit.
 
04.06.2008  
 




Jörg
Sellmeyer
Eine Listview kann 64 Spalten darstellen. Mann kann also schon mal auf einen Rutsch ca 10-12 Datensätze einlesen, wenn man den Einlesevorgang entsprechend anpaßt.

Die ermittelten Werte kann man ja erstmal in einem Array abspeichern. Dann könnte man noch gleich zehn Listviews erstellen und die Berechnungen und den Ladevorgang vielleicht sogar in eigenen Threads durchführen, b.z.w. mehrere Instanzen des Programms die Berechnungen parallel machen lassen und die Daten via SharedMemory bündeln.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
04.06.2008  
 




Jörg
Sellmeyer
Ich habs übrigens immer noch nicht ganz verstanden: sollen fünf oder 10000+ Werte gemittelt werden?

1;3;6;4;3 = 1 +3 + 6 + 4 + 3 = 17/5

oder
1;3;6;4;3
2;4;7;2;3
n1,n2:n3;n4;n5
...
1 + 2 + n1/10000 und 3 + 4 + n2 /10000 u.s.w.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
04.06.2008  
 




Frank
Abbing

Hier mal ein ganz kurzer Auszug der Daten wie sie vorliegen. Real haben die Dateien oft über zehn- oder gar zwanzigtausend Datensätze (Zeilen)


Sowie ich das sehe, befinden sich die Daten schon im CSV-Format!


ich denke mit der Listview wird das nix.


Das ist so nicht sicher. Aber ich benötige mehr Infos über deine Dateien. Ansonsten kommt die Listview.dll mit solchen Rechnereien spielend zurecht. Und die Entstehung neuer - individueller - Funktionen ist insofern ebenfalls möglich.

Für solche Dinge bietet sich auch der XProfan-Inline-Assembler XPIA an. Ich glaube nicht, dass es sooo aufwendig wäre, sich eine schnelle Rechenroutine zu schreiben.
 
04.06.2008  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

3.915 Betrachtungen

Unbenanntvor 0 min.
H.Brill24.04.2023
Jörg Sellmeyer30.05.2018
iF06.11.2014
Michael Wodrich26.02.2014
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie