table オブジェクトが解釈できるメッセージの 1 つに、quantile のあとに数字を続けたメッセージがあります。すでに、table の項でこのメッセージに関する記述を読んでいるとしたら、この複雑な計算にどのような利便性があるか疑問に思ったかもしれません。このセクションでは、いくつかの実例を示します。次は、quantile が何を行なうかに関する記述です。
quantile | 左インレット: quantile という語の後に数値を続けると、その数値をテーブル内のすべての値の合計に掛け、その後、その結果を 215 (32,768) で割ります。そして、table は、そのアドレスまでのすべての値の合計が、その結果より大きいか、等しい値をもつアドレスを出力します。 |
quantile メッセージのアーギュメントは 0 〜 32,768 であるため、テーブル内の個々のアドレスは、0 〜 32768 の範囲の一部を占め、そのアドレスに格納された値によって与えられた「重み」に比例します。ランダムな数値を使って quantile メッセージを繰り返すと、個々のアドレスは、おおよそそのアドレスに格納されている値に比例した頻度で送信されます。
fquantile メッセージは quantile メッセージと同じ動作をしますが、アーギュメントとして 0 〜 1. の浮動小数点数をとります。fquantile は、テーブル長の一部分を表すために、32,768 に対する割合を計算することを要求するのではなく、10 進数として指定することを可能にしてくれます。例えば、fquantile 0.5 は quantile 19386と同じになり、fquantile 1.0 は quantile 32768 と等しくなります。
table に 128 個の数値があり、これらがすべて 10 であったと仮定します。
次は、このテーブルに対して quantile メッセージを送信した結果を何通りか示したものです。値の合計が 128 * 10 で 1280 になっている点に注意して下さい。
quantile 0 | 出力は常に 0 になります。 |
quantile 16384 | 値の合計は全体の合計の2分の1になるインデックスを返します。このケースでは、出力されるインデックスは 63 になります。これは、64 * 10 = 640 で、これが 1280 の2分の1になるためです。 |
bang | bang は、0 〜 32768 の間の乱数をアーギュメントとして持つ メッセージ、あるいは、0 と 1 の間でランダムに選んだアーギュメント持つ fquantile メッセージと同じです。table に繰り返し bang を送信すると、テーブルは、より大きな値を持つインデックスを、より小さな値を持つインデックスより頻繁に出力します。上記の quantile の例では、table のすべての値が等しいため、bang によってすべてのインデックスが均等に返されるでしょう。しかし、値の1つが 1000 であった場合、その 1000 という値のインデックスは、table の他のインデックスよりはるかに頻繁に返されるはずです。正確にはどれくらいでしょうか?これは、最初に計算した table のすべての値の合計によって決まります。ここでは、table は 127個のインデックスが 10 にセットされ、1つだけが 1000 にセットされているため、合計は 2270 です。1000 をセットしたインデックスは、合計の2270 で1000 を割って得られる値 44% の確立で出現します。10 にセットされた他のインデックスのうちのどれかが選ばれる確立は、0.44% になります。従って、1000 にセットされたインデックスは、10 にセットされたインデックスのおよそ 100 倍ほど頻繁に出現することになります。 |
histo | 受信した数値のヒストグラムを作成します。 |
table | 数値の配列を格納、編集します。 |
チュートリアル 33 | 確率テーブル |