LabVIEWForum.de
Anfänger Frage - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Anfänger Frage (/Thread-Anfaenger-Frage)

Seiten: 1 2


Anfänger Frage - Ome - 31.03.2010 10:36

' schrieb:einzig die Ende-Eingabe ist nicht Teil des Ergebnis-Arrays, was sich aber leicht ändern lässt

Stimmt, da war ich mit meiner Änderung zu schnell, anfangs war der Startwert nicht mit drin ^_^naja

Aber die antwort auf die Frage von dimitri84 würde mich auch interessieren

' schrieb:Bewirkt das Vorinitialisieren des Schieberegisters nicht wenigstens eine theoretische Erleichterung für den LV-Compiler? Und reicht ein Array der Länge Null für die korrekte Initialisierung oder muss es schon die richtige Länge haben um Nutzen zu haben?



Anfänger Frage - Daniel1982 - 31.03.2010 10:42

Guten Tag
vielen vielen Dank für eure schnelle Antworten, ich glaub ich hab mein Problem nicht gut beschrieben, aber ich habs geschafft.
die 2 Lsg von Jens klappt auch wunderbar und ist einfacher hier poste ich mal was ich gerade gemacht habe aber wie gesagt die Lösung von Jens sieht ganz gut aus.
Lg Daniel


Anfänger Frage - jg - 31.03.2010 10:47

' schrieb:offtopic:

Bewirkt das Vorinitialisieren des Schieberegisters nicht wenigstens eine theoretische Erleichterung für den LV-Compiler? Und reicht ein Array der Länge Null für die korrekte Initialisierung oder muss es schon die richtige Länge haben um Nutzen zu haben?

Also in Matlab war es ein deutlicher Performanceunterschied, ob man jetzt das Array dynamisch hat wachsen lassen (-> langsam) oder ein mit Nullen vorinitialisiertes Array der passenden Größe mit Werten gefüllt hat (-> deutlich schneller).
Edit: Es kann natürlich gut sein, dass LV erkennt wodrauf der Code hinaus will und regelt alles in Eigenregie.
Hmm
Mal schauen, worauf du genau hinaus willst, ich gebe einmal eine allgemeine Antwort.
1. Wenn LabVIEW weiss, wie oft eine For-Schleife durchlaufen wird (und das ist ja bekannt), dann ist das Erstellen eines Arrays am Ausgang per Auto-Indexing die empfohlene Methode.
2. Bei deiner Lösung ist folgendes schlecht: Du schiebst ein leeres Array in das Shift-Register, und hängst dann immer per Build-Array ein neues Element hinzu. Build-Array bedeutet aber immer "Kopieren im Speicher", sprich, es wird Speicher für das neuere größere Array alloziert und dann das bestehende Array + neues Element kopiert, dann das alte Array freigegeben.
3. Performancemäßig identisch mit Methode 1 sollte sein:
- Array in der schon korrekten Größe vordefinieren (Initialize Array VI).
- Jetzt in der Schleife immer mit "Replace Array Subset" arbeiten.

Methode 3 kann also bei While-Schleifen von Vorteil sein. Oder wenn noch irgendeine Fallunterscheidung in der Schleife drin ist, und nicht in jedem Fall ein neues Element hinzugefügt wird. Dann alloziert man die max. Größe vor, arbeitet immer mit Replace ... und schneidet nach der Schleife das Array auf die gewünschte Größe ab (-> Funktion Array Subset).

Gruß, Jens


Anfänger Frage - SeBa - 31.03.2010 10:53

' schrieb:Guten Tag
vielen vielen Dank für eure schnelle Antworten, ich glaub ich hab mein Problem nicht gut beschrieben, aber ich habs geschafft.

Bezogen auf deinen Screenshot...

Dann aber gleich so:
[attachment=25514]


Gruß SeBa


Anfänger Frage - dimitri84 - 31.03.2010 10:57

' schrieb:Hmm
Mal schauen, worauf du genau hinaus willst, ich gebe einmal eine allgemeine Antwort.
1. Wenn LabVIEW weiss, wie oft eine For-Schleife durchlaufen wird (und das ist ja bekannt), dann ist das Erstellen eines Arrays am Ausgang per Auto-Indexing die empfohlene Methode.
2. Bei deiner Lösung ist folgendes schlecht: Du schiebst ein leeres Array in das Shift-Register, und hängst dann immer per Build-Array ein neues Element hinzu. Build-Array bedeutet aber immer "Kopieren im Speicher", sprich, es wird Speicher für das neuere größere Array alloziert und dann das bestehende Array + neues Element kopiert, dann das alte Array freigegeben.
3. Performancemäßig identisch mit Methode 1 sollte sein:
- Array in der schon korrekten Größe vordefinieren (Initialize Array VI).
- Jetzt in der Schleife immer mit "Replace Array Subset" arbeiten.

Methode 3 kann also bei While-Schleifen von Vorteil sein. Oder wenn noch irgendeine Fallunterscheidung in der Schleife drin ist, und nicht in jedem Fall ein neues Element hinzugefügt wird. Dann alloziert man die max. Größe vor, arbeitet immer mit Replace ... und schneidet nach der Schleife das Array auf die gewünschte Größe ab (-> Funktion Array Subset).

Gruß, Jens

Hat meine Frage komplett beantwortet! Sei bedankt.