Diese Demonstration wird sich also einige der grundlegenden Funktionen von Listen und Matrizen ansehen. Also werde ich mit Listen beginnen. Und ich werde ein neues Skript-Editor-Fenster bekommen. Auch hier ist die Tastenkombination Strg+T. Und ich werde die Größe ändern und neu anordnen. Lassen Sie mich weitermachen und das Protokoll vor das Tagebuch bringen. Und ich werde eine Variable erstellen, die ich meine Liste nennen werde. Und ich werde das den Ergebnissen der Listenfunktion zuweisen. Die Wortliste öffnet also Klammern, und ich werde die Variablen a, b verwenden. Und dann berechne ich die Quadratwurzel von Also das ist sqrt und dann in Klammern. Und ich werde fortfahren und neu formatieren, nur um die Groß- und Kleinschreibung und die Abstände hineinzubekommen. Und ich werde das Skript ausführen. Und so erscheint im Protokoll einfach die Information, dass eine Liste mit drei Elementen zugewiesen wurde. Wenn ich mit der Maus über meine Liste fahre, sehen wir, dass sie die von mir eingegebenen Elemente unbewertet speichert. Es sind also die beiden Variablen und die Funktion Quadratwurzel. In einer neuen Zeile in meinem Skripteditorfenster fordere ich die Auswertung der Elemente in meiner Liste an. Also gebe ich eval list open runden meine Liste ein. Und ich werde nur diese Linie laufen lassen. Und da sehe ich die ausgewerteten Ergebnisse. Nun, meine Liste bleibt unbewertet. Wenn ich also mit den Ergebnissen von eval list arbeiten wollte, wäre eine Sache, das Ergebnis der Auswertung der Liste einer neuen Liste zuzuweisen. Es gibt jedoch einige andere Möglichkeiten, wie wir Indizes verwenden können, um mit ausgewerteten Elementen aus der Liste zu arbeiten. Bevor ich also darüber spreche, lassen Sie mich über das Abonnieren der Liste im Allgemeinen sprechen. Also gehe ich zu einer neuen Linie. Und ich werde meine Liste in offene eckige Klammern schreiben. Und ich gebe a ein, um das zweite Element in der Liste zu extrahieren. Und wenn ich nur diese Zeile durchlaufe, sehe ich das unbewertete Element. Was wäre also, wenn ich das ausgewertete Ergebnis haben wollte? Nun, ich kann hier eigentlich auf meine zweite Zeile zurückkommen. Ich kann eine Auswertung meiner Liste anfordern und dieses Ergebnis dann subskribieren. Also setze ich eine offene eckige Klammer, a hinein, schließe die eckige Klammer. Und ich werde genau diese Zeile erneut ausführen, indem ich die Eingabetaste auf dem Ziffernblock ganz rechts auf meiner Desktop-Computertastatur verwende. Also habe ich einfach die ausgewertete Liste abonniert, um dieses Ergebnis zurückzubekommen. Wir sprachen über das Ändern von Listen. Also möchte ich auf eine neue Linie gehen. Und ich werde einfügen in verwenden. Einfügen in ändert also die Liste an Ort und Stelle. Also öffne ich Klammern. Und welche Liste ändere ich? Nun, es ist in meiner Liste gespeichert. Das ist das erste Argument. Was möchte ich hinzufügen? Ich werde den Namen John hinzufügen. Das ist also eine Zeichenkette. Und wenn ich das Komma dort nicht setze und das dritte Argument nicht liefere, wird es einfach ans Ende der Liste gesetzt. Aber ich werde das Komma haben, und ich werde a als optionales drittes Argument eingeben, um es an die zweite Position zu setzen. Und dann werde ich nur diese Linie ausführen. Und einfügen in gibt tatsächlich nichts an das Protokoll zurück. Aber wenn ich mit der Maus über meine Liste fahre, wo sie im Skript erscheint, können Sie sehen, dass sie geändert wurde, um den Namen John an der zweiten Position zu haben. Nehmen wir nun an, ich habe eine Liste, vielleicht wurde sie mir von einer JSL-Funktion zurückgegeben oder sie wurde zum Beispiel zum Sammeln von Benutzereingaben verwendet. Und ich muss ein Element in der Liste finden, damit ich es entfernen kann. Ich weiß, es ist- nun, ich weiß nicht, dass es in der Liste steht. Ich möchte zuerst abfragen, ob es in der Liste ist. Und wenn es das ist, möchte ich es entfernen können. Ich werde also eine Variable erstellen, um die Position des Elements John zu speichern. Ich nenne das Pos. Und ich werde das dem Ergebnis der contains-Funktion zuweisen. Und so haben wir Contains mit Zeichenketten gesehen. Jetzt enthält es mit einer Liste. Wir suchen in meiner Liste nach der Zeichenkette John, wobei natürlich zwischen Groß- und Kleinschreibung unterschieden wird. Und wenn ich diese Zeile ausführe, ist das Ergebnis, das zurückgegeben und in der Variablen pos gespeichert wird, und wenn ich das dann zum Beispiel aus der Liste entfernen wollte, könnte ich fortfahren und remove aus offenen Klammern eingeben. Wir suchen in meiner Liste. Und ich möchte, anstatt nur das letzte Element zu entfernen, was ich erhalten würde, wenn ich nach dem ersten Argument nichts angeben würde, die Variable pos verwenden. Und ich betreibe diese Linie. Und das gibt eine Liste mit einer beliebigen Anzahl von Elementen zurück, die entfernt wurden. Standardmäßig nehmen wir einen ab der im zweiten Argument angegebenen Position. Ich bekomme also eine Liste mit dieser Zeichenfolge. Und ich könnte dieses Ergebnis tatsächlich einer eigenen Variablen zuweisen, wenn ich dieses Element der Liste an anderer Stelle in meinem Skript verwenden möchte. Und ich könnte es auch aus der Liste, in der es zurückgegeben wird, extrahieren, indem ich es mit einem Also lassen Sie mich -- im Moment enthält meine Liste John nicht mehr. Ich werde meine Linie wieder laufen lassen. Der in pos gespeicherte Wert ist immer noch derselbe. Und ich werde die Zeile laufen lassen Und damit die Zeichenfolge nicht in der Liste zurückgegeben wird. Und wenn ich mit der Maus über meine Liste fahre, können wir sehen, dass sie auf ihren vorherigen Wert zurückgesetzt wurde. Lassen Sie uns ein wenig über Matrizen sprechen. Ich werde mit der rechten Maustaste in das Protokoll klicken, um es zu löschen, und dann alles im Skript-Editor-Fenster auswählen und löschen. Also werde ich damit beginnen, Menschen zu simulieren, die meine Zeilen in meiner Matrix sein werden. Und jeder dieser Leute würfelt fünfmal, einen sechsseitigen Würfel. Und das werden meine Kolumnen sein. Und ich werde diese einfach mit einem Zufallszahlengenerator generieren, aber ich werde mit einem bestimmten Startwert beginnen, damit Sie, wenn Sie mitmachen, genau dieselben Zufallszahlen erhalten. Und wir werden eine Funktion namens j-Funktion verwenden, die eine Matrix mit einer bestimmten Anzahl von Zeilen und Spalten erstellt. Das sind die ersten beiden Argumente und was dann der Wert in der Matrix sein wird, das ist das dritte Argument. Also werde ich die Zufalls-Reset-Funktion mit einem Wert von Und wieder verwenden, dies ist nur die Angabe meines Startwerts für den Zufallszahlengenerator. Also werde ich weitermachen und das ausführen. Und dann erstelle ich in einer neuen Zeile eine Variable m, der das Ergebnis der j-Funktion zugewiesen wird. Wieder beginne ich mit der Anzahl der Reihen, in denen wir Menschen simulieren, und dann mit der Anzahl der Spalten, wobei ich fünfmal einen sechsseitigen Würfel würfele. Und ich verwende die Zufalls-Integer-Funktion mit den Argumenten – wir beginnen bei und wählen Zufallszahlen bis aus. Und wieder kann ich das umformatieren, damit es ein wenig aussieht – oops, ich habe es ausgeführt, anstatt umzuformatieren es. Ich kann es immer noch neu formatieren. Na, bitte. Also läuft es jetzt auch. Und wenn wir das Protokoll etwas größer machen, können Sie sehen, dass ich diese Zeile-für-Spalte-Matrix habe. Und wie beziehe ich mich auf Elemente in dieser Matrix? Nun, wir verwenden Indizes. Also werde ich zu einer neuen Linie gehen. Vielleicht interessiert mich, was die fünfte Person beim dritten Wurf gewürfelt hat. Also werde ich den Variablennamen m tiefstellen, also m und dann eckige Klammern. für die Zeilennummer Komma, für die Spaltennummer schließen Sie die eckige Klammer und führen Sie diese Zeile aus. Und so würfelte die fünfte Person für ihren dritten Wurf ein Und das können wir tatsächlich verifizieren. Es gibt also eins, zwei, drei, vier, es gibt die fünfte Reihe und es gibt den dritten Wurf des Würfels. Was ist nun, wenn ich eine ganze Zeile oder eine ganze Spalte finden möchte? Nun, in einer neuen Zeile hier-- eigentlich verwende ich dieselbe Zeile und ersetze nur den Index in meiner Zeile. Nehmen wir an, ich möchte die gesamte Zeile. Also tippe ich für den ersten Index. Und dann gebe ich nach dem Komma ein ein, das angibt, dass keine bestimmte Spalte ausgewählt werden soll. Dies wird Zeile für Spalte sein. Und das kann ich ausführen. Und das gibt mir alle Werte reihenweise. Und wir könnten, wenn Sie nach oben scrollen möchten, überprüfen, ob dies tatsächlich die Werte in der Zeile sind. Das ist also tatsächlich das, was wir zurückgeben. Ich könnte dasselbe tun, um eine Spalte auszuwählen, in der ich nur ein für den Zeilenindex und dann eine beliebige Spaltennummer hätte. Aber nehmen wir an, ich möchte eine ganze Zeile loswerden. Nehmen wir an, ich entscheide, dass die dritte Person beim Würfeln irgendwie geschummelt hat. Also werde ich m mit a und a tiefstellen. Und dann werde ich dieser Zeile vor dem Semikolon den Wert einer leeren Matrix zuweisen. Also öffne und schließe ich einfach die eckigen Klammern. Und wenn ich diese Zeile ausführe, wird eine leere Matrix an das Protokoll zurückgegeben. Und wenn ich den Mauszeiger über m bewege und Sie die Zeilen zählen möchten, können Sie sehen, dass es jetzt nur noch neun Zeilen sind. Nun, noch einmal, spielen wir einfach mit einigen der Dinge herum, die wir mit Matrizen machen können, nehmen wir an, die neun verbleibenden Personen würfeln jeweils zum sechsten Mal. Also werde ich dies an Ort und Stelle tun. Die Betreiber habe ich m. Und dann wird der Zuweisungsoperator der Concat sein. Es sind also die doppelten vertikalen Balken und ein Gleichheitszeichen. Keine Leerzeichen, weil wir keine Leerzeichen zwischen den Komponenten dieser Operatoren haben dürfen, die mehrere Zeichen haben. Und ich werde die j-Funktion wieder verwenden. Und wir haben nur neun Reihen. Und ich möchte eine Spalte. Und ich werde wieder zufällige Ganzzahlen verwenden. Und für seine Argumente ist es immer noch ein sechsseitiger Würfel, also liefere ich So this wird m an Ort und Stelle modifizieren, indem ich eine sechste Spalte hinzufüge, wenn ich diese Zeile ausführe. Und da können Sie jetzt sehen, dass wir sechs Spalten in der Matrix haben. Lassen Sie uns das Protokoll löschen. Und ich werde damit beginnen, m Werte zuzuweisen. Ich werde keine Zufallszahlen mehr verwenden. Also werde ich den Inhalt des Skript-Editor-Fensters löschen. Ich werde eine Zählervariable i initialisieren und ihr den Wert von zuweisen. Also werde ich das ausführen, nur um das zu initialisieren. Und dann weise ich m in einer neuen Zeile eine andere Matrix zu. Also wird m das Ergebnis der Funktion j zugewiesen. Es wird fünf Zeilen haben. Diese Matrix hat fünf Zeilen, fünf Spalten, und beginnend bei wird i um für jedes Element der Matrix erhöht. Also werde ich das i plus plus verwenden, diesen Post-Inkrement-Operator, der an Ort und Stelle hinzufügt. Und ich werde weitermachen und das ausführen. Und so habe ich eine By-Matrix. Und beachten Sie, dass wir zeilenweise und nicht spaltenweise inkrementieren. Und das ist wichtig für eine andere Methode des Abonnements, die wir bald sehen werden. Also inkrementieren wir zeilenweise. Nun, was ist, wenn ich eine Sequenz haben möchte, die tatsächlich bis zu Nun geht, es gibt sicherlich viele verschiedene Möglichkeiten, dies zu tun. Aber ein schneller Weg wäre, jedes Element in der Matrix, die ich gerade erstellt habe, mit zu multiplizieren. Und wieder können wir diese Operationen vektorisieren. Ich muss die Matrix nicht durchlaufen. Ich weise einfach zu -- Und ich werde eine weitere direkte Zuweisung machen -- m und dann ist das Sternchen gleich, also muss die Multiplikation mit Wir nicht direkt erfolgen. Aber anstatt eine neue Variable zu erstellen, mache ich das. Also wieder muss ich nicht loopen. Es wird elementweise alles multiplizieren mit Und ich führe das aus. Und da ist diese Matrix, die von bis in Inkrementen von Jetzt geht, eine andere Möglichkeit, diese Matrix zu erstellen, wäre in zwei Schritten, beginnend mit der Indexfunktion. Also werde ich löschen, was sich im Skript-Editor-Fenster befindet. Ich mach weiter und lösche auch das Log. Und im Skript-Editor-Fenster gebe ich m ein. Und dem wird der Wert zugewiesen, der sich aus der Indexfunktion ergibt – Index öffnende Klammern. Und wir beginnen bei Wir zählen bis Das optionale dritte Argument, das ich hier verwenden werde, ist das Inkrement. Also gehen wir vorbei. Hier ist also der erste Schritt zur Erstellung dieser Matrix, die wir hatten, die by-Matrix. Also erstellen wir einen Zeilenvektor mit der Indexfunktion. Und dann kann ich das gestalten. Also werde ich zu einer neuen Linie gehen. Ich werde m wieder überschreiben. m ist also das Ergebnis der Shape-Funktion, die m als erstes Argument nimmt und ihre Dimensionen so ändert, dass sie fünf Zeilen und fünf Spalten hat. Sie müssen mit dieser Shape-Funktion sehr vorsichtig sein. Wenn Ihr Zeilenvektor in diesem Fall nicht mit einer quadratischen Matrix übereinstimmt, die ich hier angegeben habe, schneidet JMP diesen Vektor entweder ab, wenn die Matrix, die Sie mit shape angeben, zu klein ist. Oder wenn Sie eine größere Matrix angeben, wird der Vektor einfach wiederholt. Seien Sie also vorsichtig, wenn Sie die Shape-Funktion verwenden. Also ich will das laufen lassen. Und da ist wieder diese quadratische Matrix, die von bis in Schritten von reicht. Abgesehen von der Tatsache, dass es normalerweise viele Möglichkeiten gibt, alles in JMP zu tun, wollte ich das auch tun, um über eine andere Art der Subskription zu sprechen. Wir haben die Zeilen-für-Spalten-Indizes gesehen. Und ich möchte über den einzelnen Index sprechen, den Sie manchmal sehen werden. Also, wenn ich wollte – wir können die Funktion contains mit verwenden – wir haben es mit Zeichenketten gesehen. Sie können es mit Listen verwenden. Wir können es mit Matrizen verwenden. Wenn ich die Position der Zahl in der Matrix finden möchte, die derzeit m gespeichert ist, nun, wenn ich das beschreiben würde, würde ich sagen, OK, es ist die Zeile Spalte. Also würde ich ein Komma tiefstellen. Aber wenn ich JMP gebeten habe, das für mich zu finden, werde ich einfach die Enthält verwenden. Und wiederum könnte Ihr Skript in der Praxis dieses Ergebnis einer Variablen zuweisen. Ich brauche das hier nicht zu tun - enthält und dann m Komma JMP wird mir keinen geben Es wird mir einen einzelnen Wert geben. Nun, wie funktioniert dieser einzelne Wert? Der Einzelwert-Index – also wenn ich zurückkomme – gehe ich hier zu einer neuen Zeile und tippe m und dann die eckigen Klammern mit einem Einzelwert-Index und führe das aus. Das heißt: Der Einzelwert-Index behandelt meine Matrix so, als wäre sie ein Zeilenvektor, und beginnt von der ersten Position an zu zählen. Wenn wir also im Protokoll zurückgehen, um das Ergebnis meiner Indexfunktion zu sehen, behandelt dieser einzelne Index es als Zeilenvektor und zählt zeilenweise, genau wie wir zeilenweise inkrementiert haben, um die Position dieses Werts zu erhalten. Und wir werden andere Beispiele sehen, wenn wir später mit Matrizen arbeiten, wo JMP uns diesen einzelnen Index zurückgibt. Das letzte, was wir hier tun, ist eine Art willkürliche Berechnung, um zu veranschaulichen, dass es Funktionen gibt, die Matrizen als Argumente verwenden können, Rechenfunktionen - also haben wir bereits die Shape-Funktion und Contains gesehen. Aber ich gehe hier zu einer neuen Zeile und tippe log und dann m als Argument dividiert durch Und die andere Sache an diesem Beispiel – nun, lassen Sie es mich ausführen. Und dann erzähle ich Ihnen das andere über das Beispiel. Also habe ich gerade diese Berechnung für jedes Element durchgeführt und durch dividiert. Aber die andere Sache, die ich nur erwähnen möchte, ist, dass Funktionen in JSL Funktionen als Argumente annehmen können. Wir werden das durchgehend sehen. Wir haben bereits einige Beispiele gesehen. Also dieser Divisionsoperator, das ist wirklich die Divisionsfunktion, die den Logarithmus von m als Argument nimmt und dann musste ich den Logarithmus von m nicht berechnen und ihn in einer Variablen speichern, um ihn der Divisionsfunktion zuzuführen. Ich kann diese Berechnung direkt durchführen. Und noch einmal, wie das aussehen würde, wenn ich die Funktion ausschreiben würde, wäre geteilte offene Klammern. Ersetzen Sie den Operator durch ein Komma und schließende Klammern. Ich muss also keine Variable bereitstellen, die diese Werte speichert. Ich kann sie berechnen, während ich die Divisionsfunktion ausführe. Das sind also einige Beispiele für Listen und Matrizen und einige der Möglichkeiten, wie wir mit diesen bestimmten Arten von Datenstrukturen arbeiten können.