Liste in Matrix umwandelnWas ist der schnellste Weg, eine Liste: {"a", 1, 2, "b"} in eine Matrix umzuwandeln: [. 1 2 .]?
Ich gehe davon aus, dass ich einfach alle Elemente durchlaufen kann, hoffe aber, dass es einen schnelleren Weg gibt, da ich dies in meiner Anwendung viele tausend Male tun werde, wobei jede Liste Hunderte von Elementen enthält.
Betreff: Liste in Matrix konvertierenBOOYAH!, Den Sieg verkünden und nach Hause gehen! Bei meiner Datentabelle mit 30.000 Zeilen und 150 Spalten stieg meine Routine von einer Laufzeit von 8,5 Minuten, bei der ich jede Spalte in jeder Zeile durchlief und die Grenzwerte für diese Spalte überprüfte, auf eine Laufzeit von 4,5 SEKUNDEN, bei der eine ganze Zeile auf einmal überprüft wurde! Wie gesagt, BOOYAH!
Betreff: Liste in Matrix konvertierenIch bin mir hier über die Speicherverwaltung nicht sicher. Aber da die NumberColBox nicht in einer Variablen gezeichnet oder gespeichert wird, glaube ich nicht, dass sie nennenswerte Mengen an Speicher verbraucht oder blockiert.
Es scheint auch linear zu skalieren: Bei einer Schleife von 10000x, 100000x und 1000000x dauert es 0,27, 2,7 bzw. 26,7 Sekunden. Kein Unterschied in der Speichernutzung.
Auf diese kleine Liste angewendet ist das Zahlenfeld etwa 30-mal schneller als der oben beschriebene Datentabellenansatz. Bei sehr langen Listen – es kann eine Obergrenze dafür geben, wie viele Elemente eine NumberColBox enthalten kann – ist die Datentabellenmethode möglicherweise effizienter.
Betreff: Liste in Matrix konvertierenUm perfekt zu sein, habe ich Folgendes getan:
data = shape(Number Col Box("", dt[1,0]) << get as matrix, 1, N Cols(dt));Mit ähnlich aufgebauten Matrizen für die LSL/USL-Spezifikationen kann ich nun Folgendes tun:
If( max(data < LSL) > 0 | max(data > USL) > 0, "FAIL", "PASS")
um eine Datenzeile anhand der in den Spalteneigenschaften angegebenen Grenzwerte zu überprüfen, ohne die Spalten für jede Zeile durchlaufen zu müssen – einen mXn-Prozess nehmen und ihn in einen m+n-Prozess umwandeln.
Betreff: Liste in Matrix konvertierenPraktisch perfekt! Frage: Was passiert mit der Number Col Box? Bleibt es im Gedächtnis oder wird es nur lange genug erstellt, um die Nachricht an ihn zu senden?
Betreff: Liste in Matrix konvertierenDas geht ziemlich schnell:
MyList = {"a", 1, 2, "b"};
Mat = Number Col Box("", MyList) << get as matrix;Betreff: Liste in Matrix konvertierenEigentlich brauche ich die fehlenden Werte. Manchmal ist ein fehlender Wert kein Problem, beispielsweise wird ein Test später beim Erstellen zusätzlicher Spalten im Datensatz hinzugefügt. Frühere Daten liegen nicht außerhalb der Spezifikation für Tests, die nicht durchgeführt wurden. Leider stellen fehlende Daten manchmal ein Problem dar. Der Test wird abgebrochen, die vorherigen Ergebnisse entsprechen jedoch den Spezifikationen. Ich habe noch nicht herausgefunden, wie ich damit umgehen soll, aber ich mache Fortschritte.
Betreff: Liste in Matrix konvertierenWenn Sie sich Ihre ursprüngliche Frage ansehen, wollten Sie eine Matrix von [1,2].Ich habe eine Anweisung hinzugefügt, um die fehlenden Werte zu entfernen
MyList = {"a", 1, 2, "b"} ;
dt = New Table("Temp",
New Column("C",Numeric,values(MyList)),
"Private"
);
dt << select where( ismissing(:c)) << delete rows;
Mat = dt << get as matrix;
Close(dt,"No Save");
Show(Mat);Betreff: Liste in Matrix konvertierenDanke, ich werde es versuchen.
Betreff: Liste in Matrix konvertieren@MarkDayton ,
Ich weiß nicht, ob die Verwendung einer Datentabelle in Ordnung ist? Wenn ja, bitteschön. Da die Datentabelle privat ist, erwarte ich, dass sie für Hunderte von Werten mehr als recht schnell ist
MyList = {"a", 1, 2, "b"} ;
dt = New Table("Temp",
New Column("C",Numeric,values(MyList)),
"Private"
);
Mat = dt << get as matrix;
Close(dt,"No Save");
Show(Mat);