LabVIEWForum.de
Arrays als array of Referenzen.vi - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Arrays als array of Referenzen.vi (/Thread-Arrays-als-array-of-Referenzen-vi)



Arrays als array of Referenzen.vi - gottfried - 21.01.2009 14:51

Hallo,

keine Funktionsfrage sonder eine Stilfrage - geht das auch schöner?

Danke

Gottfried

V8.6

PS.: scön wäre zumindest wenn man die Arrays am FP nicht bräuchte - invisible? ... na ja


Arrays als array of Referenzen.vi - rasta - 22.01.2009 05:46

Hallo Gottfried,
ich hoffe ich hab Dich richtig verstanden.
Im Anhang mein Lv85_img Vorschlag.

Gruß
Ralf

PS: Testen konnte ich es nicht, bitte um Rückmeldung falls dir ein Fehler auffällt.


Arrays als array of Referenzen.vi - gottfried - 22.01.2009 10:47

Danke,

aber (leider) das hat einen grossen Hacken: die Tabellen sind sehr unterschiedlich z.B.: 100x30 aber auch 300000x150, wenn ich das in ein übergeordnetes Array packe sind alle sub-Arrays so gross wie das Größte - oder?

Stimmt - oder nicht?

Goittfried

PS.: bin mir nicht sicher - muss es ausprobieren - sonst wäre das ja wirklich genial


Arrays als array of Referenzen.vi - IchSelbst - 22.01.2009 11:11

' schrieb:aber (leider) das hat einen grossen Hacken: die Tabellen sind sehr unterschiedlich z.B.: 100x30 aber auch 300000x150, wenn ich das in ein übergeordnetes Array packe sind alle sub-Arrays so gross wie das Größte - oder?
Stimmt - oder nicht?
Stimmt. In LV haben alle Indices die selbe Größe. Daher gilt das größe SubArray für alle.

Abhilfe: SubArrays in Cluster legen und Array of Cluster of Array machen. Dann ist der Index vom Typ Cluster, nicht mehr vom Typ Array.


Arrays als array of Referenzen.vi - rasta - 24.01.2009 03:56

' schrieb:Stimmt. In LV haben alle Indices die selbe Größe. Daher gilt das größe SubArray für alle.

Abhilfe: SubArrays in Cluster legen und Array of Cluster of Array machen. Dann ist der Index vom Typ Cluster, nicht mehr vom Typ Array.

Hallo,
IchSelbst, kannst du das bitte mal in das Beispiel einbauen ?


@Gottfried
300000x150 bekomme ich auf meinem Rechner noch nichteinmal vorinitialisiert (Not enough Memory) Hmm

Gruß
Ralf


Arrays als array of Referenzen.vi - IchSelbst - 24.01.2009 10:49

' schrieb:IchSelbst, kannst du das bitte mal in das Beispiel einbauen ?
Schau mer mal.

Zitat:300000x150 bekomme ich auf meinem Rechner noch nichteinmal vorinitialisiert (Not enough Memory) Hmm
Macht immerhin 360MB (= 300.000 * 150 * 8) pro Array. Irgendwo hat auch ein Speichermanager Grenzen. Und ob Auslagern eine Alternative für ein Array als solches ist, wage ich zu bezweifeln.


Arrays als array of Referenzen.vi - IchSelbst - 24.01.2009 12:25

' schrieb:kannst du das bitte mal in das Beispiel einbauen ?
Dein Beispiel ist schon so wie ich gemeint habe.

Hier nochmals ein Erklärungsversuch:

Ein 3D-Array ARRAY[LenA,LenX,LenY] of DBL (ein solches war ich der Meinung, hat gottfreid ganz am Anfang verwendet) ist so gesehen ein Array of Array of Array, also ARRAY[LenA]ARRAY[LenX]ARRAY[LenY] of DBL (oder Array[LenA]Array[LenX,LenY] of DBL). IN LV ist die Größe eines jeden Teilarrays ARRAY[IndexA] immer gleich groß (hier: LenX*LenY*LenArrTyp). Das heißt also alle ARRAY[IndexX,IndexY] sind gleich groß/lang. (Beachte: dieses Verfahren kann kaskadiert werden auf m-dimensionale Arrays).
Letztendlich gilt die Größenkonstanz auch für ein 1D-Array. Das klingt zwar trivial, ist aber so. Die Größe ist die Größe des Basistyps, z.B. DBL also 8 Byte.

Ist der Basistyp ein CLUSTER, so ist die Basislänge eines m-dimensionalen ARRAY of CLUSTER die Größe von CLUSTER. Cluster sind komplexte Datentypen, die selbst wieder unterschiedliche Datentypen "sammeln" können. Cluster haben eine besondere Datenstruktur, z.B. wenn er einen String oder ein Array enthält. Die Daten des Arrays selbst stehen nämlich nicht direkt im Cluster. Im Cluster selbst steht ein Pointer auf einen Datenbereich, der die Daten tatsächlich enthält. Dadurch ist es nun möglich, dass jedes dieser ARRAY[X].CLUSTERARRAY eine eigene Größe haben kann.
Überlege folgendes: Gesetzt der Fall, die Daten von String und Array sind im Cluster abgespeichert. Ganz am Anfang des Clusters steht ein String und danach viele, viele sonstige Daten. Jetzt soll der String am Anfang doppelt so lang gemacht werden. Das würde nun bedeuten, dass ALLE DATEN im Cluster verschoben werden müssten. Das ist aber ein Aufwand (MemoryManager!), der bis ins unbezahlbare ausarten kann. Die Lösung über einen Pointer ist da ganz einfach: Neuen Speicher für den String allozieren, String kopieren und erweitern und neuen Pointer speichern. Analoges gilt für das Array.

Hier nochmals ein Bild und ein VI mit Strings zum Kucken für die Länge bei 2DArr.

Lv80_img


Arrays als array of Referenzen.vi - rasta - 24.01.2009 13:19

Hallo IchSelbst,
erstmal vielen Dank für den ausführlichen Erklärunsversuch.

So ganz verstanden habe ich es noch nicht, aber das wird schon.Wink

Für mein Beispiel ist mir noch eine Verbesserung eingefallen und zwar beim einlesen des 2-D-Arrays die daraus resultierende Längen (Row, Column) mit in den Cluster aufzunehmen und beim späteren Zugriff mit Array Subset die Originalgröße wieder herzustellen.

Gruß
Ralf


Arrays als array of Referenzen.vi - IchSelbst - 24.01.2009 14:47

' schrieb:Für mein Beispiel ist mir noch eine Verbesserung eingefallen und zwar beim einlesen des 2-D-Arrays die daraus resultierende Längen (Row, Column) mit in den Cluster aufzunehmen und beim späteren Zugriff mit Array Subset die Originalgröße wieder herzustellen.
Dieses Verfahren an sich ist dann vorteilhaft, wenn genau das Problem mit den gleich langen Teilarrays auftritt. Nur: bei deiner Datenstruktur mit dem Cluster tritt dieses Problem nicht auf. In deinem aktuellen Beispiel ist dieses Verfahren also umsonst.

Schau nach, die Werte von Row und Col sind mit den Längen der Dimensionen des Teilarrays nach dem ArraySubset identisch.


Arrays als array of Referenzen.vi - rasta - 24.01.2009 15:24

' schrieb:Dieses Verfahren an sich ist dann vorteilhaft, wenn genau das Problem mit den gleich langen Teilarrays auftritt. Nur: bei deiner Datenstruktur mit dem Cluster tritt dieses Problem nicht auf. In deinem aktuellen Beispiel ist dieses Verfahren also umsonst.

Schau nach, die Werte von Row und Col sind mit den Längen der Dimensionen des Teilarrays nach dem ArraySubset identisch.

Hi,
wie ich schon erwähnte "So ganz verstanden habe ich es noch nicht, aber das wird schon". Lol
Das kommt davon dass ich ohne echte Werte einfach so drauf los programmiert habe, wird nicht wieder passieren.

Mit den jetzt simulierten 2 Arrays ist mir noch ein kleiner Fehler aufgefallen Siehe Screenshot (Index For muss für die "Endlänge" Array Subset mit
1 inkrementiert werden.

So dann nochmals vielen Dank und Gruß
Ralf