In dieser Demonstration werden einige Möglichkeiten veranschaulicht, wie Sie Matrizen verwenden können. Deshalb klicke ich im Abschnitt „Kurstagebuch“ auf „Aushärtezeitdaten“. Und nehmen wir an, dass wir die durchschnittliche Aushärtungszeit für jedes Datum ermitteln müssen. Wir addieren also alle Aushärtezeitwerte in jeder Zeile und dividieren durch die Anzahl der Proben. Und ich werde Matrizen verwenden, um diese Berechnung durchzuführen. Dies liegt wiederum daran, dass diese vektorisierten Operationen dies effizienter machen. Zurück im Kurstagebuch habe ich ein vorgefertigtes Skript mit dem Titel „Statistik berechnen mit Matrizen“ gefunden. Und lassen Sie mich das verschieben, damit wir sowohl die Aushärtungszeittabelle – wir machen sie etwas breiter und gleichmäßiger – als auch unser Skript sehen können. Das Skript beginnt also mit der Erstellung einer Variablen namens s. Und s wird das Ergebnis der J-Funktion speichern. Und die J-Funktion erstellt eine Matrix mit einer bestimmten Anzahl von Zeilen, einer bestimmten Anzahl von Spalten und einem Startwert. Und in diesem Fall verwende ich die Nrow-Funktion ohne Argumente. Es wird also nur die Anzahl der Zeilen in der aktuellen Datentabelle betrachtet. Also führe ich line aus. Und Sie können im Protokoll sehen, dass das, was jetzt in s gespeichert ist, dieser Spaltenvektor von Nullen ist. Und ich werde das verwenden, um jeden der Aushärtezeitwerte hinzuzufügen. Ich verwende also eine for-Schleife. Ich habe c equal initialisiert, weil ich mit den Aushärtezeitdaten mit der zweiten Spalte beginnen möchte. Ich teste, ob c kleiner oder gleich der Anzahl der Spalten ist. Auch hier wäre es eine bewährte Vorgehensweise, insbesondere wenn Sie mit größeren Datentabellen arbeiten, diese Zählung außerhalb der for-Schleifen durchzuführen, sie in einer Variablen zu speichern und c mit dieser Variablen zu vergleichen. Als nächstes wertet der Parser den Rumpf der for-Schleife aus. Schauen wir uns also zunächst die rechte Seite der Zuweisungsfunktion an. Also sende ich die Nachricht „get as matrix“ beim ersten Mal an die Spalte und füge sie dann an Ort und Stelle zu s hinzu. Dann aktualisieren wir c mit dem Post-Inkrement-Operator. Das fügt also eins zu c hinzu. Wir testen, um sicherzustellen, dass c immer noch kleiner oder gleich der Anzahl der Spalten ist. Und jetzt erhalten wir eine Spalte als Matrix und fügen diese an Ort und Stelle zu s hinzu. Ich werde also weitermachen und Zeilen durchlaufen lassen. Und denken Sie daran, dass die for-Funktion einen fehlenden Wert an das Protokoll zurückgibt. Sie können jedoch mit der Maus über s fahren, um zu sehen, dass es jetzt diese ziemlich großen Zahlen enthält, die Summe über alle fünf Aushärtezeitspalten. Zum Schluss sende ich eine Nachricht an die aktuelle Datentabelle, die neue Spaltennachricht. Und der Titel der neuen Spalte lautet „Durchschnitt“. Und für die Werte – und das könnten auch wieder eingestellte Werte oder Werte sein – werde ich tatsächlich eine Berechnung durchführen. Ich kann also wieder Funktionen für das Werteargument bereitstellen, ohne zuerst Variablen erstellen zu müssen, um diese zu speichern. Also die Funktion hier – ich habe eine Divisionsfunktion und eine Subtraktionsfunktion. Ich nehme s, das ist die Summe über die Aushärtezeitspalten, und dividiere es durch c minus. Und es ist durch c minus, weil wir begonnen haben, c zu zählen. Das verringert also eins von der Anzahl der Elemente, die wir hinzugefügt haben hoch. Und natürlich musste c über den Test hinaus inkrementiert werden. Es musste den Test nicht bestehen. Also der endgültige Wert von c-- Ich kann darüber schweben und sehen, dass das so ist. Und doch haben wir nur tatsächlich Dinge hinzugefügt. Deshalb dividieren wir durch c minus. Ich werde also mit der letzten Zeile fortfahren. Und Sie können sehen, dass in der Aushärtezeit-Datentabelle die Spalte „Durchschnitt“ erstellt wurde. Und im Protokoll können Sie sehen, dass ich eine Instanz eines Spaltenobjekts erstellt habe. Und tatsächlich könnte ich alles online zeilenweise einer Variablen zuweisen, wenn ich weiter mit dieser Spalte arbeiten wollte. Nun möchte ich im nächsten Schritt der Demonstration mit allen Aushärtezeitdaten auf einmal arbeiten und Berechnungen durchführen. Deshalb werde ich die gesamte Datentabelle als Matrix extrahieren und nicht jeweils eine Spalte einzeln, wie ich es in diesem vorgefertigten Skript getan habe. Und bevor ich das tue, möchte ich die Spalte entfernen, die ich gerade erstellt habe. Daher wähle ich den gesamten Inhalt dieses Skript-Editor-Fensters aus. Und ich werde eine Nachricht an die aktuelle Datentabelle senden. Spalten löschen. Und die Spalte, die ich löschen möchte, heißt „Durchschnitt“. Und ich möchte noch einmal darauf hinweisen, dass die Verwendung der aktuellen Datentabelle sehr praktisch ist, wenn Sie Dinge testen oder ich Präsentationen präsentiere. In einem Produktionsskript möchten wir unbedingt explizitere Verweise auf unsere Tabelle verwenden. Daher ist die aktuelle Datentabelle nützlich, wenn Sie mit der Skripterstellung üben und einfach testen, wie etwas funktioniert. Aber in der Praxis würden wir bei einem Skript, das Sie bereitstellen oder verwenden wollten und das Sie über JMP-Versionen hinweg und in mehreren Situationen, in denen Sie es verwenden, beibehalten möchten, diese explizite Datentabellenreferenz anstelle der aktuellen Datentabelle verwenden. Also werde ich weitermachen und dies durchführen. Und dadurch wurde die Spalte gelöscht, die ich loswerden wollte. Diese skriptfähige Nachricht wurde an das Protokoll zurückgegeben. Lassen Sie mich nun den Inhalt des Skripteditorfensters löschen. Ich werde die gesamte Datentabelle als Matrix extrahieren und diese in der Variablen m speichern. Daher wird m das Ergebnis des Sendens einer Nachricht der aktuellen Datentabelle zugewiesen. Und diese Nachricht wird als Matrix abgerufen. Also werde ich das ausführen. Und Sie können im Protokoll sehen, oder Sie können mit der Maus über m fahren, dass ich diese Matrix jetzt habe. Und die erste Spalte sind diese wirklich riesigen Zahlen. Und das liegt natürlich daran, dass, wenn ich get als Matrix an eine Datentabelle sende, im Allgemeinen alle numerischen Spalten herausgezogen werden. Und dazu gehören auch Termine. Daher wird der Tag hier als numerisch behandelt. Sie können es am Modellierungstyp-Symbol erkennen, da es kontinuierlich ist. Der Datentyp muss numerisch sein. Sie könnten tatsächlich auch – wenn ich das breiter mache – auch wenn „day“ Zeichen zu enthalten scheint, ist das nur eine Formatierung. Es ist also richtig ausgerichtet, weil es eine Zahl ist. Lassen Sie sich also auch diesen Wert als Matrix extrahieren. Und wenn ich Berechnungen zur Aushärtezeit durchführen möchte – und tatsächlich beinhalten die Berechnungen, die ich durchführen möchte, die Ermittlung eines Minimal- und Maximalwerts –, möchte ich diese großen Werte für den Tag nicht in dieser Matrix haben. Also gehe ich in eine neue Zeile. Und ich werde vorsichtig sein. Ich möchte, dass das, was ich bereits habe – der Code, den ich bereits in das Fenster eingefügt habe – sichtbar bleibt, während ich das durchgehe, aber ich möchte nicht das Ganze noch einmal überarbeiten. Deshalb werde ich sehr vorsichtig sein, eine Zeile nach der anderen auszuführen. Um diese erste Spalte loszuwerden, verwende ich die Variable m und subskriptiere sie mit einer Null und einer Eins. Und wenn Sie sich erinnern, bedeutet die Subskription nur, dass Sie keine bestimmte Zeile auswählen. Mit anderen Worten: Geben Sie mir alle Zeilen in der ersten Spalte. Und ich werde das der leeren Matrix zuweisen, die nur aus den eckigen Klammern ohne Inhalt besteht. Und um nur diese eine Zeile auszuführen, kann ich die Zeile markieren und eine der Methoden verwenden, die wir zum Ausführen eines gesamten Skripts verwenden. Es wird jedoch nur der ausgewählte oder hervorgehobene Teil ausgeführt. Oder auf dem Ziffernblock einer Standard-Desktoptastatur kann ich die Eingabetaste ganz rechts verwenden. Was also an das Protokoll zurückgegeben wird, ist nur die leere Matrix. Aber wenn ich jetzt mit der Maus über „m“ fahre oder „m“ hervorhebe und es ausführe, sehen Sie, dass wir jetzt nur noch Aushärtezeitwerte haben. Wir haben die erste Spalte mit den großen Datumszahlen entfernt. Ich gehe zu einer neuen Zeile und schaue mir einige der anderen Matrixfunktionen an, die wir verwenden können. Ich erstelle also eine Variable, a, der das Ergebnis der Verwendung der Loc-Funktion, LOC, zugewiesen wird. Und ich werde die Positionen in dieser Matrix m finden, an denen die Werte größer sind als. Und wenn ich nur diese Zeile durchführe, behandeln wir die Matrix m, als wäre sie ein Zeilenvektor und zählen von der ersten an position und gebe einfach die Positionen, die einzelnen tiefgestellten Positionen, aller Elemente in der Matrix zurück, die größer als sind. Wenn ich nun die tatsächlichen Werte haben möchte, erstelle ich eine Variable namens avals. Und ich werde das Ergebnis der Subskription der in m gespeicherten Matrix mit der Variablen a signieren. Und ich werde genau diese Zeile ausführen. Und es gibt die tatsächlichen Aushärtezeitwerte, die größer sind. Und natürlich, um dieses Skript zu optimieren, hätte ich, wenn ich nicht die Positionen all dieser Werte speichern müsste, einfach eine Subskription durchführen können – lassen Sie mich das einfach kopieren – eine Subskription der Matrix m mit der loc-Funktion. Ich brauche diesen zusätzlichen Schritt, die Standorte zu speichern und dann zu verwenden, nicht, es sei denn, ich habe einen anderen Grund, mit den Positionen zu arbeiten, die ich in diesem Beispiel ursprünglich in einem gespeichert hatte. Als nächstes möchte ich mit dieser Matrix einige transformierte Werte berechnen. Bei dieser Transformation wird jede Beobachtung der Aushärtezeit abzüglich des Minimums in der gesamten Tabelle durch den Bereich der maximalen bis minimalen Aushärtezeitwerte geteilt und mit multipliziert. Es ist also so, als würde man bei jeder Beobachtung den Abstand von der minimalen Aushärtung nehmen Zeit im Verhältnis zur Reichweite. Dies verdeutlicht einen weiteren Vorteil der Arbeit mit Matrizen. Um einen Mindestwert in einer gesamten Datentabelle zu finden, würde die Arbeit mit den einzelnen Spalten in der Datentabelle viele Schritte erfordern, um diesen Mindest- oder Höchstwert zu ermitteln, unabhängig davon, ob ich Skripts erstellte oder interaktiv arbeitete. Aber wenn ich mit einer Matrix arbeite, kann ich das in einer sehr kurzen Codezeile erledigen. Also werde ich in meinem Skript-Editor-Fenster – lassen Sie mich jetzt fortfahren und den Inhalt löschen – eine Variable „minCT“ erstellen, also „min cure time“, und ich werde dieser Variablen das Ergebnis der Verwendung zuweisen min-Funktion mit m als Argument. Und ich werde weitermachen und diese Linie verfolgen. Der Mindestwert ist also. Und dann erstelle ich auch eine Variable maxCT. Und ich werde ihm das Ergebnis der Verwendung der Max-Funktion mit m als Argument zuweisen. Und ich werde genau diese Zeile ausführen. Und jetzt kann ich diese Variablen in meiner Berechnung dieser Transformation verwenden. Ich werde eine Variable t erstellen, um die Transformationswerte zu speichern. Lassen Sie mich zu einer neuen Zeile gehen. Also wird t das Ergebnis von Zeiten zugewiesen und dann werden Klammern für den Zähler m minus minCT geöffnet, Klammern für das Divisionszeichen geschlossen und dann Klammern für den Nenner geöffnet, maxCT minus minCT. Ich kann also nur diese Zeile ausführen und erhalte dann diese Transformationswerte. Jede Beobachtung abzüglich des Minimums als Anteil des Bereichs der Aushärtezeitwerte. Das sind viele Dezimalstellen. Wir haben wirklich nicht so viel Präzision. Wir können diese Werte also tatsächlich runden. Und ich werde wieder zu einer neuen Zeile gehen. Ich werde die Werte in t überschreiben, indem ich das Ergebnis der Rundungsfunktion wieder t zuweise. Sie können dies in einer neuen Variablen tun, wenn Sie das Original beibehalten möchten. Aber ich werde t eingeben und dann den Zuweisungsoperator, die Rundungsfunktion. Die Argumente sind zuerst: Was runde ich? Ich runde also die in t gespeicherten Werte. Und wie viele Dezimalstellen möchte ich dann haben? Ich will Null. Dadurch werden die Werte in der Matrix gekürzt. Dies ist nicht dasselbe, als würde man eine Datenspalte so formatieren, dass sie nur null Dezimalstellen hat, wobei die vollständigen Werte weiterhin im Hintergrund gespeichert werden. Ich formatiere hier also nicht. Ich kürze tatsächlich die Werte. Ich werde weitermachen und das ausführen. Und jetzt habe ich die ganzzahligen Werte für die transformierten Werte. Wenn Sie diese Werte nun wieder in die Aushärtezeit-Datentabelle einfügen möchten, können Sie die Matrix durchlaufen und neue Spalten erstellen. Wenn ich einfach eine komplett neue Datentabelle erstellen möchte, gibt es eine sehr einfache Funktion namens „as table“. Und es gibt optionale Argumente für die Benennung dieser Tabelle und für die Benennung der Spalten. Ich werde die Dinge für diese Demonstration einfach halten, indem ich einfach die Variable t als Argument für die Tabelle verwende. Und wenn ich das ausführe, erhalte ich diese unbenannte Tabelle mit generischen Spaltennamen. Aber alle diese Werte aus dieser Transformationsmatrix sind in dieser Tabelle enthalten. Und auch hier könnte ich den Namen und die Spaltenüberschriften als Teil des Arguments „as table“ angeben. Oder ich könnte das Skript verwenden, um dies nachträglich zu ändern. Deshalb haben wir uns verschiedene Möglichkeiten angesehen, numerische Werte aus einer Datentabelle zu extrahieren, entweder spaltenweise oder die gesamte Datentabelle, alle numerischen Spalten, die gesamte Datentabelle und einige Manipulationen, die wir mit Matrizen durchführen können.