2016-08-01 38 views
1

Ich weiß, dass die Frage verwirrend ist, so werde ich versuchen, mein Problem zu erklären. Ich arbeite in einem Labview-Projekt und eines der Dinge, die ich tun muss, ist, nachdem ich den Benutzer die Anzahl der Variablen und die Anzahl der verschiedenen Werte für jeden von ihnen gefragt habe, ein Array mit allen de-Kombinationen erstellen.Wie bevölkern und Array, deren Reihen waren Kombinationen und Spalten die verschiedenen Gruppen? (Labview)

Lets nehme an wir drei verschiedene Variablen, zum Beispiel: var1, var2, var3

und die Anzahl der diffent Werte für jeden von ihnen ist:

var1 -> 0, 1, 2 
var2 -> 11, 22 
var3 -> 55, 66, 77, 88 

Also, das resultierende Array sollte werden wie folgt aus:

0 11 55 
0 11 66 
0 11 77 
0 22 55 
0 22 66 
... 

diese Weise bis 3 x 2 x 4 = 24 Zeilen

Unter Berücksichtigung, dass die Anzahl der Variablen und Werte von jedem normalerweise anders sein wird, wie kann ich dieses Array auffüllen?

Ich brauche, wie es mit Labview zu tun. Vielen Dank im Voraus.

Antwort

1

Das Wort Sie suchen ist „Kartesisches Produkt“.

Sie können gmath/Discrete Math.llb/Kartesisches Produkt von Lists.vi verwenden, um dies zu erreichen:

labview code

Dies gibt das gewünschte Ergebnis:

result

Die Art und Weise Es funktioniert, wenn Sie dem Cartesian Product VI ein 1D-Array zuführen, das die Größe mehrerer Arrays angibt, von denen Sie das kartesische Produkt erhalten möchten, und es generiert die entsprechenden Indizes, die Sie zum Indizieren der entsprechenden Indizes benötigen e Arrays, um das kartesische Produkt zu erstellen.

Alles, was Sie tun müssen, ist ein 2D-Array von (1D Array von Zeilenvektoren) zu erstellen, das alle Informationen enthält, aus denen Sie das kartesische Produkt berechnen möchten, und ein 1D-Array, das die Größe jedes einzelnen Zeilenvektors anzeigt. Wenn Sie in LabVIEW ein Array von 1D-Arrays erstellen, wird die Anzahl der Spalten zu max (len (row_vector_i)). Um diese Längeninformationen für automatisches Cross-Produkt beizubehalten, besteht die beste Möglichkeit darin, ein 1D-Array von Clustern zu erstellen Jeder Cluster hat ein einzelnes 1D-Array oder einen Zeilenvektor. Dies bewahrt die Größeninformation.

Hier ist, wie das aussieht:

cluster auto

ich all dies in einem Projekt gespeichert, die mit LV8.6 vollständig kompatibel sein sollte, found here

+0

Dies scheint eine gute Lösung zu sein, ich Ich werde es versuchen. Das einzige Problem ist, dass die Anzahl der Variablen nicht immer 3 ist, sondern auch 1,2,4,5 .... Die einzige Lösung, die ich finde, ist eine konditionale Struktur mit 5 oder 6 "wenn", von 2 bis 6 oder 7 vars, und in jede "if" -Bedingung geben Sie die Lösung an, die Sie für 3 Variablen vorgeschlagen haben. Vielen Dank. –

+0

Ich hatte ein großes Problem, meine LV-Version ist 8.6 und hat kein kartesisches Produkt. –

+0

Ich habe das Beispiel erstellt und es dem Hauptpost hinzugefügt. Das kartesische Produkt-VI berücksichtigt Listen mit variabler Länge, indem es die Array-Eingabe "Anzahl der Elemente in jeder Liste" verwendet. – ijustlovemath

1

Die einfachste Möglichkeit besteht darin, 3 For-Loops ineinander zu verwenden. So

die kleinste für Schleife var3 iterieren,

Medium für Schleife wird var2 und

groß for-Schleife durchlaufen wird var1 laufen.

0

eine Python-Implementierung teilen, würde helfen, wenn Sie die Sprache angeben, können Sie bei der Umsetzung sind.

def array_3d(var1,var2,var3): 
    a = [] 
    for i in range(len(var1)): 
    for j in range(len(var2)): 
     for k in range(len(var3)): 
     a.append([var1[i],var2[j],var3[k]]) 
    print a 


array_3d([1,2,3],[10,20,30],[300,400,500,600])