リストと行列の使用

このデモでは、リストと行列の基本的な機能をいくつか見ていきます。まずはリストから始めましょう。新しいスクリプトエディタウィンドウを開きます。キーボードショートカットはCtrl+Tです。ウィンドウのサイズを変更し、並べ替えます。ログをジャーナルの前に移動しましょう。そして、リストという変数を作成します。そして、リスト関数の結果を代入します。リストという単語は括弧で囲み、変数aとbを使用します。そして、平方根を計算します。つまり、sqrtで括弧で囲みます。大文字とスペースを揃えるために書式を変更します。そして、スクリプトを実行します。ログには、3つの要素を持つリストが代入されたという情報が表示されます。リストにマウスポインターを合わせると、入力した項目が評価されずに保存されていることがわかります。 2 つの変数と関数の平方根です。スクリプト エディタ ウィンドウの新しい行に、リスト内の項目の評価を要求します。「eval list open bracketheses my list」と入力します。そして、その行だけを実行します。すると、評価された結果が表示されます。この時点では、リストは未評価のままです。eval list の結果を操作したい場合、リストの評価結果を新しいリストに割り当てることが 1 つの方法です。ただし、添字を使用して、リストの評価された項目を操作する方法は他にもあります。そのことについて話す前に、リストの添字付け全般について説明させてください。新しい行に移動します。「my list open square brackets」と入力します。「a」と入力して、リストの 2 番目の項目を抽出します。この行だけを実行すると、評価されていない項目が表示されます。では、評価された結果が必要な場合はどうすればよいでしょうか。実は、ここで 2 行目に戻ることができます。リストを評価し、その結果に添字を付けることができます。開き角括弧「a」を記述し、閉じ角括弧「a」を記述します。デスクトップコンピュータのキーボードの右端にあるテンキーのEnterキーを使って、この行をもう一度実行します。これで、評価されたリストに添字を付けて結果を取得できました。リストの変更について説明しました。新しい行に移動しましょう。「insert into」を使います。「insert into」はリストをその場で変更します。開き括弧「a」を記述します。どのリストを変更するのでしょうか?リストに格納されています。これが最初の引数です。何を追加したいのでしょうか?Johnという名前を追加します。これは文字列です。カンマと3番目の引数を記述しないと、リストの末尾に追加されます。カンマは記述します。オプションの3番目の引数「a」を入力して、2番目の位置に追加します。そして、その行だけを実行します。insert into は実際にはログに何も返しません。しかし、スクリプト内のリストのどこかにマウスポインターを合わせると、Johnという名前が2番目の位置に追加されていることがわかります。さて、リストがあるとします。これはJSL関数から返されたものかもしれませんし、ユーザー入力を収集するために使われたものかもしれません。そして、リスト内の項目を見つけて削除する必要があります。その項目がリストに含まれているかどうかは分かりません。まず、リストに含まれているかどうかを確認します。そして、含まれている場合は削除できるようにします。そこで、項目Johnの位置を格納する変数を作成します。この変数を pos とします。そして、contains関数の結果をこの変数に代入します。ここまでで、containsを文字列で使用していましたが、今度はリストで使用します。リスト内で文字列Johnを検索します。もちろん、大文字と小文字は区別されます。この行を実行すると、返されて変数 pos に格納される結果は次のとおりです。たとえば、リストから削除したい場合は、開き括弧から「remove」と入力できます。リスト内を検索しています。最初の引数の後に何も指定しなかった場合に取得される最後の項目のみを削除するのではなく、変数 pos を使用します。この行を実行します。削除された要素の数だけリストが返されます。デフォルトでは、2 番目の引数で指定された位置から 1 つを取得します。つまり、その文字列を含むリストが得られます。スクリプトの他の場所でリストのその要素を使用したい場合は、結果を独自の変数に割り当てることができます。また、返されたリストから、これを添え字で指定することで、それを抽出することもできます。では、今、リストには John はもう含まれていません。この行をもう一度実行します。pos に格納されている値は同じままです。行 を実行します。すると、リストにない文字列が返されます。リストにマウスポインタを置くと、以前の値に戻っていることがわかります。行列について少し説明しましょう。ログを右クリックしてクリアし、スクリプトエディタウィンドウ内のすべてを選択して削除します。まず、行列の行となる人物のシミュレーションを行います。各人物は6面ダイスを5回振ります。これが列になります。乱数生成器を使ってこれらの列を生成しますが、特定のシード値から開始します。こうすることで、この手順に従うと、全く同じ乱数が得られます。j関数という関数を使います。これは、指定された行数と列数の行列を作成します。これらが最初の2つの引数で、3番目の引数は行列の値になります。では、random reset 関数を の値で使用します。繰り返しますが、これは乱数生成器の初期シード値を指定するだけです。では、これを実行します。次に、新しい行に変数 m を作成し、これに j 関数の結果を割り当てます。ここでも、6面サイコロを5回振って、人をシミュレートする行数と列数を指定します。次に、random integer 関数を引数として使用します。開始値は で、最大で までの乱数を選択します。ここでも、見た目を少し変えるために書式を変更します。おっと、書式を変更するのではなく、実行してしまいました。それでも書式を変更することはできます。これで実行できました。ログをもう少し大きくすると、行と列の行列があることがわかります。この行列の要素をどうやって参照するのでしょうか?添字を使用します。では、新しい行に進みます。 5人目の人が3回目にサイコロを振ったときに何が出たか知りたいかもしれません。そこで変数名に添え字を付けます。つまりm、そして角括弧です。行番号にはカンマ、列番号には角括弧を閉じて、その行を実行します。5人目の人が3回目に振った目はaです。実際にそれを確認できます。1、2、3、4、5行目、そしてサイコロの3回目の振った目があります。では、行全体または列全体を見つけたい場合はどうすればよいでしょうか。ここでは新しい行を使用しますが、実際には同じ行を使用して、行の添え字を置き換えます。行全体を取得するとします。最初の添え字として と入力します。そしてカンマの後に a と入力して、特定の列を選択したくないことを示します。これは行のすべての列になります。これを実行すると、行のすべての値が得られます。上にスクロールして、行の値が本当にその行の値であるかどうかを確認できます。これが実際に返される値です。同じ方法で列を選択することもできます。行の添え字に a と列番号を指定します。しかし、行全体を削除したいとします。3人目の人が何らかの理由でサイコロを振ってズルをしたと判断したとします。そこで、m の添え字に a と a を指定します。そして、セミコロンの前で、その行に空の行列の値を代入します。つまり、角括弧を開いて閉じるだけです。この行を実行すると、ログに返されるのは空の行列です。m にマウスを合わせて行数を数えると、今は9行しかないことがわかります。ここでもう一度、行列でできることをいくつか試してみましょう。残りの9人がそれぞれ6回目にサイコロを振るとします。これをインプレースで実行します。演算子は m です。そして代入演算子はConcatです。二重の縦棒と等号です。スペースは入れません。複数の文字を持つこれらの演算子の要素の間にスペースを入れることはできないからです。そしてまたj関数を使います。行は9つだけです。列は1つ必要です。そしてまたランダムな整数を使います。引数には6面サイコロなので、これを指定します。これでこの行を実行すると、6番目の列が追加され、mが変更されます。これで行列が6列になったことがわかります。ログをクリアしましょう。そして、mへの値の代入からやり直します。もう乱数は使いません。そこでスクリプトエディタウィンドウの内容をクリアします。カウンタ変数iを初期化し、それにの値を代入します。初期化のためだけにこれを実行します。そして新しい行で、別の行列をmに代入します。つまり、mにはj関数の結果が代入されます。行は5つになります。この行列は5行5列で、i から始めて、行列の各要素ごとに i を ずつ増分します。そこで、i をプラス、つまりインプレースで加算するポストインクリメント演算子を使います。これを実行してみます。これで、x 行列ができました。行方向にインクリメントしていることに注意してください。列方向ではありません。これは、これから説明する添字の別の方法で重要です。行方向にインクリメントします。では、実際に まで増加するシーケンスが必要な場合はどうすればよいでしょうか? もちろん、これを行うにはさまざまな方法があります。しかし、簡単な方法は、作成した行列の各要素を で乗算することです。繰り返しますが、これらの操作はベクトル化できます。行列をループする必要はありません。単に を代入するだけです -- そして、インプレースでもう一度代入します -- m とアスタリスクを等号で結んで、 を に掛けます。インプレースで行う必要はありません。新しい変数を作成するのではなく、そうすることで、ループする必要がなくなります。要素ごとにすべてを掛け合わせていきます。これを実行します。すると、からまでを ずつ増分する行列が作成されます。この行列を作成する別の方法は、2つの手順で行います。まず、index 関数を使用します。スクリプト エディタ ウィンドウの内容をクリアします。ログもクリアします。スクリプト エディタ ウィンドウで、m と入力します。これに、index 関数 (インデックス開き括弧) の結果の値が割り当てられます。 から開始し、 までカウントします。ここで使用するオプションの 3 番目の引数は増分です。 ずつ進みます。これが、by 行列を作成する最初の手順です。index 関数を使用して行ベクトルを作成します。次に、これを整形します。新しい行に移動します。もう一度 m を上書きします。m は shape 関数の結果になります。shape 関数は m を最初の引数として受け取り、次元を 5 行 5 列に変更します。このshape関数には細心の注意が必要です。この場合、行ベクトルがここで指定したx×正方行列と一致しない場合、JMPは、shapeで指定した行列が小さすぎる場合はこのベクトルを切り捨てます。より大きな行列を指定した場合は、ベクトルを繰り返します。したがって、shape関数を使用する際は注意が必要です。それでは、これを実行します。ここでも、xからyまでをxで増分する正方行列があります。JMPでは通常、あらゆる操作を様々な方法で実行できることに加えて、これを実行した理由の1つは、別の添字の方法について説明したいからです。行x列の添字については既に説明しました。そして、時々目にする単一の添字についても説明したいと思います。contains関数は、文字列で使用できました。リストでも使用できます。行列でも使用できます。行列内で現在 m に格納されている数値の位置を調べたい場合、説明文では「行 m 列 m だ」と記述するでしょう。そこでカンマ付きの添え字を使用します。しかし、JMP にそれを求めるように指示する場合は、contains を使用します。また、実際には、スクリプトによってこの結果が変数に割り当てられる場合があります。ここでこれを行う必要はありません。contains の後に m とカンマを入力すると、JMP は単一の値を返すことはありません。単一の値を返します。では、この単一の値はどのように機能するのでしょうか。単一の値の添え字は、ここで新しい行に移動して「m」と入力し、次に角括弧で囲んだ単一の値の添え字を入力して実行します。これで、単一の値の添え字は、行列を行ベクトルとして扱い、最初の位置からカウントを開始します。ログに戻ってインデックス関数の結果を確認すると、この単一の添字は行ベクトルとして扱い、行方向にカウントします。これは、行方向にインクリメントして値の位置を取得するのと同じです。JMPが単一の添字を返す様子は、後ほど行列を扱う際に他の例で見ていきます。最後に、行列を引数として取れる関数、つまり計算関数があることを示すために、ちょっとした計算を行います。shape関数とcontains関数については既に説明しました。ここで新しい行に進み、logと入力し、引数としてmをdivided byと入力します。この例についてもう一つ…実行してみましょう。それから、この例についてもう一つ説明します。すべての要素に対してこの計算を実行し、divided byとしました。ここでもう一つ言及しておきたいのは、JSLでは関数が引数として関数を取ることができるということです。これは後で詳しく説明します。すでにいくつかの例を見てきました。この除算演算子は、実際にはmの対数を引数として取る除算関数です。そして、mの対数を計算して変数に格納し、除算関数に渡す必要はありません。直接計算できます。繰り返しますが、関数を「割り算の開き括弧」で書き直すと、演算子をカンマと閉じ括弧に置き換えます。つまり、これらの値を格納する変数を用意する必要がなくなります。除算関数を実行しながら計算できます。これらは、リストと行列の例と、これらの特定のデータ構造を扱う方法の一部です。
Re: リストと行列の使用良いプレゼンテーション、ありがとう。
Re: リストと行列の使用非常に役立ちます。