INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Array mit Schieberegister



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

29.04.2015, 13:43
Beitrag #1

PeterF Offline
LVF-Grünschnabel
*


Beiträge: 11
Registriert seit: Apr 2015

2014
2015
kA



Array mit Schieberegister
Hallo,

da ich in meiner Studienarbeit eine große Messdatei einlesen und die Graphisch darstellen soll, musste ich mich mit dem Thema Array beschäftigen.
könnt ihr mir bitte sagen warum es mit Schieberegister und ersetzen schneller geht (siehe Bilder) ?

Ich habe folgenden Test ca 3 Minuten je Variante ausgeführt und den Wert gemittelt um Windows ein bisschen auszuklammern.
-1M Reihen und 5 Spalten
- Schiebe Register 4-5 Sekunden
- ohne Schiebe Register 8-9 Sekunden

gibt es vielleicht noch eine schnellere Lösung?

Vielen Dank und Grüße


Angehängte Datei(en) Thumbnail(s)
       
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
29.04.2015, 13:50 (Dieser Beitrag wurde zuletzt bearbeitet: 29.04.2015 13:53 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Array mit Schieberegister
Hallo Peter,

im Bild mit dem Schieberegister fehlt ein Draht in der innersten Schleife: du ersetzt immer das gleiche Element. Damit ist das Ergebnis nicht identisch!
(Außerdem musst du die N-Anschlüsse der FOR-Loops nicht verdrahten…)

Warum nicht so:
    (ca. 0.7s auf meinem PC…)
Hmm

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.04.2015, 14:16
Beitrag #3

PeterF Offline
LVF-Grünschnabel
*


Beiträge: 11
Registriert seit: Apr 2015

2014
2015
kA



RE: Array mit Schieberegister
Hallo GerdW,

danke für deine schnelle Antwort! Das hatte ich übersehen.
Zu deinem Vorschlag:
Was mache ich mit Funktionen die nicht als Konvertierung von Array in Array vorhanden sind?
Wie zum Beispiel den Zeitstempel der in meiner Datei als String steht?
hatte mir schnell ein Array mit numerischen Werten über eine For Loop generiert und wollte die dann eben umformatieren.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.04.2015, 14:18 (Dieser Beitrag wurde zuletzt bearbeitet: 29.04.2015 14:21 von GerdW.)
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Array mit Schieberegister
Hallo Peter,

Zitat:Wie zum Beispiel den Zeitstempel der in meiner Datei als String steht?
Das war nicht Teil deiner Ursprungsfrage…
Zeitstempel musst du einzeln umwandeln.

Nachfrage: Was kam denn nun heraus, nachdem du den fehlenden Draht gezogen hast? Ist die ReplaceMethode immer noch schneller - oder die Autoindizierung?

Nachtrag:
Normalerweise sollte man direkt mit Arrays arbeiten - man kann z.B. die Spalte mit den Zeitstempeln nachträglich ins Array einfügen.
Aber: bei großen Datenmengen bekommt man dann schnell mal einen "out of memory"-Fehler. (Ich habe hier manchmal Messungen mit 20000 Zeilen mit je 250 Werten, die als Textdatei vorliegen. Wenn man die dann komplett am Stück einlesen und umwandeln will, kann es krachen…)
Mögliche Lösung: man kann zeilenweise arbeiten. Das kostet Zeit - beugt aber dem "out of memory" vor…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.04.2015, 14:26 (Dieser Beitrag wurde zuletzt bearbeitet: 29.04.2015 14:30 von PeterF.)
Beitrag #5

PeterF Offline
LVF-Grünschnabel
*


Beiträge: 11
Registriert seit: Apr 2015

2014
2015
kA



RE: Array mit Schieberegister
Es machte keinen Sinn ein Replace auszuführen, da ich ein nicht indiziertes Array angeschlossen habe und dadurch der Replace nicht ausgeführt wird.
Deshalb auch die 4 Sekunden, das war dann nur die Zeit, die das increment an der For Loop zum lesen brauchte.
Ich hab es mit Insert into probiert, das war SEHR langsam.

Ich formuliere meine Frage erneut:

wie sollten Werte aus einem Array, die einzeln formatiert werden sollen, auslesen und wieder zusammenfügen?

(29.04.2015 14:18 )GerdW schrieb:  Hallo Peter,

Zitat:Wie zum Beispiel den Zeitstempel der in meiner Datei als String steht?
Das war nicht Teil deiner Ursprungsfrage…
Zeitstempel musst du einzeln umwandeln.

Nachfrage: Was kam denn nun heraus, nachdem du den fehlenden Draht gezogen hast? Ist die ReplaceMethode immer noch schneller - oder die Autoindizierung?

Nachtrag:
Normalerweise sollte man direkt mit Arrays arbeiten - man kann z.B. die Spalte mit den Zeitstempeln nachträglich ins Array einfügen.
Aber: bei großen Datenmengen bekommt man dann schnell mal einen "out of memory"-Fehler. (Ich habe hier manchmal Messungen mit 20000 Zeilen mit je 250 Werten, die als Textdatei vorliegen. Wenn man die dann komplett am Stück einlesen und umwandeln will, kann es krachen…)
Mögliche Lösung: man kann zeilenweise arbeiten. Das kostet Zeit - beugt aber dem "out of memory" vor…

Das Problem hatte ich schon und habe mir deshalb vor der Funktion "konvertieren" eine Abfrage gebaut, die mir sagt wie groß meine Datei ca ist (über Array größe und die zu erwartenden Datentypen) und dann gesplitet. Danach habe ich die Teile wieder zusammengeführt.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.04.2015, 14:33 (Dieser Beitrag wurde zuletzt bearbeitet: 29.04.2015 14:35 von GerdW.)
Beitrag #6

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Array mit Schieberegister
Hallo Peter,

Zitat:wie sollten Werte aus einem Array, die einzeln formatiert werden sollen, auslesen und wieder zusammenfügen?
Das Array am FOR-Loop-Eingang autoindizieren, in der Loop das Element formatieren und am Ausgang der Loop wieder autoindizierend zum Array zusammensetzen…

Das klappt mit rein numerischen Arrays sehr gut: LabVIEW kennt schon im Voraus die Anzahl der Werte und den Speicher, den die Elemente brauchen. Bei String-Arrays wird es komplizierter: hier kennt man zwar die Anzahl der Elemente, aber nicht deren Speicherbedarf - jeder String könnte unterschiedlich lang sein. Deshalb sind Operationen mit String-Arrays meist etwas langsamer als mit rein numerischen Daten - der LabVIEW-MemoryManager hat einfach deutlich mehr zu tun!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
29.04.2015, 14:36
Beitrag #7

PeterF Offline
LVF-Grünschnabel
*


Beiträge: 11
Registriert seit: Apr 2015

2014
2015
kA



RE: Array mit Schieberegister
Danke!
Und welchen Vorteil hat es dann ein schieberegister zu benutzen? Hat das in LabView eine besondere Bedeutung in der Speicherbehandlung?
rein aus Interesse..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.04.2015, 14:42
Beitrag #8

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Array mit Schieberegister
Hallo Peter,

Zitat:Hat das in LabView eine besondere Bedeutung in der Speicherbehandlung?
Ja. Das Schieberegister ist der Buffer für die Daten…

Zitat:Und welchen Vorteil hat es dann ein schieberegister zu benutzen?
Du hast nur noch einen internen Buffer für Daten und kannst per IndexArray/ReplaceArraySubset (oder mit der InPlace-Struktur) wahlfrei darauf zugreifen - ohne weitere (unnötige) Datenkopien zu erzeugen.

Wenn du aber wie in deinem Beispiel nicht wahlfrei, sondern auf jedes Element und eins nach dem anderen zugreifen willst, bietet sich die Autoindizierung an…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.04.2015, 14:43
Beitrag #9

PeterF Offline
LVF-Grünschnabel
*


Beiträge: 11
Registriert seit: Apr 2015

2014
2015
kA



RE: Array mit Schieberegister
Ok, das Bedeutet ich splitte das Array auf. Numerische Werte und den Zeitstempel. Anzahl der möglichen Spalten gebe ich dann an eine ForLoop mit autoindexing und benutze dann die Funktion Zahl nach String. Das gebe ich dann wieder über autoindexing aus.
Habe ich das richtig Verstanden das dies die schnellste möglichkeit wäre?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.04.2015, 14:50
Beitrag #10

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Array mit Schieberegister
Hallo Peter,

die wahrscheinlich schnellste Methode:
   
Das heißt nicht, dass es auch die effizienteste Methode bzgl. Speicherbedarf ist…
Wie oben geschrieben: bei großen Arrays kannst du bei der hier gezeigten Variante schnell einen OutOfMemory-Fehler bekommen…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Verwendung Schieberegister de_la_questa 2 3.304 04.01.2021 17:26
Letzter Beitrag: GerdW
  Werte nacheinander in Array schreiben über ein Schieberegister BlackEagle 5 8.552 13.12.2019 13:40
Letzter Beitrag: GerdW
  Schieberegister Initialisierung mit Array => Not a Number Roland 7 8.236 03.07.2017 15:58
Letzter Beitrag: Roland
  Schieberegister anhalten Axel_Cologne 1 3.354 03.05.2016 10:39
Letzter Beitrag: jg
  Schieberegister zurücksetzen KorsarDerWeide 5 6.443 13.05.2015 09:50
Letzter Beitrag: Lucki
  Werte für Graphen aus Schieberegister löschen Daniel H. 2 3.381 09.01.2015 17:45
Letzter Beitrag: Daniel H.

Gehe zu: