Diese Demonstration wird also einige Möglichkeiten veranschaulichen, wie Sie Matrizen verwenden können. Also klicke ich im Kursjournal im Abschnitt Cure Time Data auf Cure Time Data. Und nehmen wir an, dass wir die durchschnittliche Heilungszeit für jedes Datum finden müssen. Wir addieren also alle Aushärtungszeitwerte in jeder Zeile und dividieren durch die Anzahl der Proben. Und ich werde Matrizen verwenden, um diese Berechnung durchzuführen. Dies bedeutet wiederum, dass diese vektorisierten Operationen dies effizienter machen. Zurück im Kursjournal habe ich ein vorgefertigtes Skript namens Compute Statistics With Matrices. Und lassen Sie mich das verschieben, damit wir sowohl die Cure-Time-Tabelle sehen können – wir machen das ein wenig breiter, gleichmäßiger – als auch unser Skript. 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 bestimmten 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 Zeile aus. Und Sie können im Protokoll sehen, dass das, was jetzt in s gespeichert ist, dieser Spaltenvektor aus Nullen ist. Und ich werde das verwenden, um jeden der Aushärtungszeitwerte an Ort und Stelle hinzuzufügen. Also verwende ich eine for-Schleife. Ich habe c equals initialisiert, weil ich mit den Heilungszeitdaten mit der zweiten Spalte beginnen möchte. Ich teste, dass c kleiner oder gleich der Anzahl der Spalten ist. Und wieder wäre es eine bewährte Methode, 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 zuerst die rechte Seite der Assign-Funktion an. Also sende ich beim ersten Mal die Nachricht get als Matrix an die Spalte und füge diese dann an Ort und Stelle zu s hinzu. Dann aktualisieren wir c mit dem Post-Increment-Operator. Das fügt also eins an Stelle 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. Also werde ich fortfahren und Zeilen durchgehen. Und denken Sie daran, dass die for-Funktion einen fehlenden Wert an das Protokoll zurückgibt. Aber Sie können den Mauszeiger über s bewegen, um zu sehen, dass es jetzt diese ziemlich großen Zahlen enthält, die Summe über alle fünf Spalten für die Aushärtezeit. Zuletzt sende ich eine Nachricht an die aktuelle Datentabelle, die neue Spaltennachricht. Und der Titel der neuen Spalte wird Durchschnitt sein. Und für die Werte – und wieder können dies festgelegte Werte oder Werte sein – werde ich tatsächlich eine Berechnung durchführen. Ich kann also noch einmal 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 Spalten für die Aushärtungszeit, und ich teile sie durch c minus Und es ist durch c minus, weil wir mit dem Zählen von c bei begonnen haben. Das zieht also eins von der Anzahl der hinzugefügten Elemente ab hoch. Und natürlich musste c nach dem Test inkrementieren. Es musste den Test nicht bestehen. Also der Endwert von c-- Ich kann schweben und sehen, dass das Und doch haben wir tatsächlich nur Dinge hinzugefügt. Deshalb dividieren wir also durch c minus Also werde ich weitermachen und diese letzte Zeile ausführen. Und Sie können sehen, dass die Spalte „Durchschnitt“ in der Aushärtungszeit-Datentabelle erstellt wurde. Und im Protokoll können Sie sehen, dass ich eine Instanz eines Spaltenobjekts erstellt habe. Und tatsächlich, line alles online, das Ergebnis könnte einer Variablen zugewiesen werden, wenn ich weiter mit dieser Spalte arbeiten wollte. Für den nächsten Schritt der Demonstration möchte ich jetzt mit allen Cure-Time-Daten auf einmal arbeiten und Berechnungen durchführen. Ich werde also die gesamte Datentabelle als Matrix extrahieren und nicht eine Spalte nach der anderen, wie ich es in diesem vorgefertigten Skript getan habe. Und bevor ich das tue, möchte ich diese Spalte loswerden, die ich gerade erstellt habe. Ich werde also den gesamten Inhalt dieses Skript-Editor-Fensters auswählen. 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äsentiere. In einem Produktionsskript möchten wir wirklich explizitere Verweise auf unsere Tabelle verwenden. Die aktuelle Datentabelle ist also gut, wenn Sie mit Skripten üben und nur testen, um zu sehen, wie etwas funktioniert. Aber in der Praxis würden wir bei einem Skript, das Sie bereitstellen oder verwenden wollten und über Versionen von JMP und in mehreren Situationen, in denen Sie es verwenden, beibehalten möchten, diese explizite Datentabellenreferenz anstelle der aktuellen Datentabelle verwenden wollen. Also werde ich weitermachen und das ausführen. Und das löschte die Spalte, 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 in der Variablen m speichern. Also wird m das Ergebnis des Sendens einer Nachricht an die aktuelle Datentabelle zugewiesen. Und diese Nachricht wird als Matrix erhalten. Also werde ich das laufen lassen. Und Sie können im Protokoll sehen, oder Sie können den Mauszeiger über m bewegen, dass ich diese Matrix jetzt habe. Und die erste Spalte sind diese wirklich riesigen Zahlen. Und das liegt natürlich daran, dass beim Senden von get als Matrix an eine Datentabelle im Allgemeinen alle numerischen Spalten herausgezogen werden. Und dazu gehören Termine. Der Tag wird hier also als numerisch behandelt. Sie können das am Symbol für den Modellierungstyp erkennen, da es kontinuierlich ist. Der Datentyp muss numerisch sein. Sie könnten tatsächlich auch – wenn ich das breiter mache – obwohl der Tag Zeichen zu enthalten scheint, ist das nur eine Formatierung. Es ist also richtig begründet, weil es eine Zahl ist. Holen Sie sich also auch diesen Wert als Matrix. Und wenn ich Berechnungen zur Aushärtungszeit durchführen möchte – und tatsächlich beinhalten die Berechnungen, die ich durchführen möchte, das Finden 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 Reihe. Und ich werde vorsichtig sein. Ich möchte das behalten, was ich bereits habe – den Code, den ich bereits in das Fenster eingefügt habe, sichtbar, während ich das durchgehe, aber ich möchte das Ganze nicht überarbeiten. Ich werde also sehr darauf achten, eine Zeile nach der anderen auszuführen. Um diese erste Spalte loszuwerden, werde ich die Variable m verwenden und sie mit einer Null und einer Eins tiefstellen. Und wenn Sie sich erinnern, bedeutet diese 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 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 verwenden, um ein ganzes Skript auszuführen. Es wird jedoch nur der ausgewählte oder hervorgehobene Teil ausgeführt. Oder auf dem Ziffernblock einer Standard-Desktop-Tastatur 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 wenn ich m hervorgehoben und ausgeführt habe, können Sie sehen, dass wir jetzt nur Cure Time-Werte haben. Wir haben diese erste Spalte mit diesen großen Datumszahlen losgeworden. Ich gehe zu einer neuen Zeile und schaue mir einige der anderen Matrixfunktionen an, die wir verwenden können. Ich werde also eine Variable a erstellen, der das Ergebnis der Verwendung der loc-Funktion LOC zugewiesen wird. Und ich werde die Positionen in dieser Matrix finden, m, an denen die Werte größer als sind. Und wenn ich nur diese Zeile durchlaufe, behandeln wir die Matrix, m, als wäre sie ein Zeilenvektor und zählen von Anfang an position und nur die Positionen zurückgeben, die einzelnen tiefgestellten Positionen, aller Elemente in der Matrix, die größer als sind. Wenn ich nun die tatsächlichen Werte haben möchte, werde ich eine Variable namens avals erstellen. Und ich werde unterschreiben, dass das Ergebnis der Subskription der in m gespeicherten Matrix mit der Variablen a. Und ich werde genau diese Linie laufen lassen. Und es gibt die tatsächlichen Aushärtungszeitwerte, die überschreiten. Und natürlich, um dieses Skript zu rationalisieren, wenn ich die Positionen all dieser Werte nicht speichern müsste, hätte ich eigentlich einfach subskribiert – lassen Sie mich das einfach kopieren – subskribiert der Matrix m mit der loc-Funktion. Ich brauche diesen zusätzlichen Schritt, die Positionen 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 a gespeichert hatte. Als Nächstes möchte ich mit dieser Matrix einige transformierte Werte berechnen. Und diese Transformation nimmt jede Beobachtung der Aushärtungszeit minus dem Minimum über die gesamte Tabelle dividiert durch den Bereich der maximalen bis minimalen Aushärtungszeitwerte und multipliziert das mit. Es ist also so, als würde man bei jeder Beobachtung den Abstand von der minimalen Aushärtung nehmen Zeit als Anteil der Reichweite. Dies verdeutlicht einen weiteren Vorteil der Arbeit mit Matrizen. Um einen Mindestwert über eine gesamte Datentabelle zu finden, ob ich Skripte erstellte oder interaktiv arbeitete, würde die Arbeit mit den einzelnen Spalten in der Datentabelle viele Schritte erfordern, um diesen Mindest- oder Höchstwert zu finden. Aber wenn ich mit einer Matrix arbeite, kann ich das in einer sehr kurzen Codezeile erledigen. Also in meinem Skript-Editor-Fenster – lassen Sie mich jetzt den Inhalt löschen – werde ich eine Variable minCT erstellen – also min Cure Time, und ich werde dieser Variablen das Ergebnis der Verwendung von zuweisen min Funktion mit m als Argument. Und ich werde weitermachen und diese Linie laufen lassen. Der Mindestwert ist also Und dann erstelle ich auch eine Variable maxCT. Und ich weise ihr das Ergebnis der Verwendung der max-Funktion mit m als Argument zu. Und ich werde genau diese Linie laufen lassen. Und das ist Und jetzt kann ich diese Variablen in meiner Berechnung dieser Transformation verwenden. Ich erstelle eine Variable, t, um die Transformationswerte zu speichern. Lassen Sie mich zu einer neuen Zeile gehen. Also wird t das Ergebnis von Zeiten und dann öffnende Klammern für den Zähler m minus minCT, schließende Klammern das Divisionszeichen und dann öffnende Klammern für den Nenner, maxCT minus minCT, zugewiesen. Ich kann also nur diese Zeile ausführen und erhalte dann diese Transformationswerte. Jede Beobachtung abzüglich des Minimums als Anteil des Wertebereichs der Aushärtungszeit. Nun, 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 Linie gehen. Ich werde die Werte in t überschreiben, indem ich das Ergebnis der Rundungsfunktion wieder t zuweise. Sie könnten dies in einer neuen Variablen tun, wenn Sie das Original behalten möchten. Aber ich werde t eingeben und dann den Assign-Operator, die Round-Funktion. Die Argumente sind zuerst, was runde ich? Also runde ich die in t gespeicherten Werte. Und wie viele Nachkommastellen möchte ich dann? Ich will null. Jetzt werden die Werte in der Matrix abgeschnitten. Dies ist nicht dasselbe wie eine Datenspalte so zu formatieren, dass sie nur null Dezimalstellen hat, wobei die vollständigen Werte immer noch im Hintergrund gespeichert werden. Also formatiere ich hier nicht. Ich schneide eigentlich die Werte ab. 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 Datentabelle für die Aushärtungszeit einfügen möchten, können Sie die Matrix durchlaufen und neue Spalten erstellen. Wenn ich nur eine komplett neue Datentabelle erstellen wollte, 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 as table verwende. Und wenn ich das ausführe, erhalte ich diese unbenannte Tabelle mit generischen Spaltennamen. Aber all diese Werte aus dieser Transformationsmatrix sind in dieser Tabelle enthalten. Und wieder 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. Wir haben uns also ein paar verschiedene Möglichkeiten angesehen, numerische Werte aus einer Datentabelle zu extrahieren, entweder nach Spalte oder der gesamten Datentabelle, alle numerischen Spalten, die gesamte Datentabelle und einige Manipulationen, die wir mit Matrizen durchführen können.