# 無料学習の推奨事項: Python ビデオ チュートリアル
##Random Walk
今回は、Python を使用してランダム ウォーク データを生成し、matplotlib を使用してデータを表示します。 ランダム ウォークの各ウォークは完全にランダムであり、明確な方向はなく、結果は一連のランダムな決定によって決まります。このように考えることができます。ランダム ウォークとは、アリが混乱するたびにランダムな方向に進む道です。
RandomWalk() クラスの作成
ランダム ウォークをシミュレートするために、前進する方向をランダムに選択する RandownWalk クラスを作成します。このクラスには 3 つの属性が必要です。そのうちの 1 つはランダム ウォークの数を格納する変数で、他の 2 つはランダム ウォークによって通過した各点の x 座標と y 座標を格納するリストです。 RandomWalk クラスには、
init() と fill_walk() の 2 つのメソッドのみが含まれており、後者はランダム ウォークによって渡されたすべてのポイントを計算します。
from random import choiceclass RandomWalk(): """一个生成随机漫步数据的类""" def __init__(self, number_points=5000): """初始化随机漫步的属性""" self.number_points = number_points # 所有随机漫步都始于(0,0) self.x_values = [0] self.y_values = [0]
ランダムな決定を行うには、すべての可能な選択肢をリストに保存し、どの選択肢を使用するかを決定するたびに Choice() を使用します。その後、ランダム ウォークを実行します。デフォルトのポイント数を 5000 に設定し、x 値と y 値を格納する 2 つのリストを作成し、それぞれのウォークを (0,0) から開始させます。
方向を選択してください
def fill_walk(self): """计算随机漫步中包含的所有点""" # 不断漫步,直到列表达到指定的长度 while len(self.x_values) <strong> ウォークに必要な数のポイントがすべて含まれるまで継続するループを確立します。このメソッドの主要部分は、Python に 4 つのさまよう決定 (左に行くか右に行くか) をシミュレートする方法を指示します。上がるのか下がるのか?与えられた方向に沿ってどのくらいの距離ですか? </strong> x_direction の値を選択するには、choice([1, -1]) を使用します。結果は、右に行くことを意味する 1 か、左に行くことを意味する -1 になります。次に、choice([0, 1, 2 , 3, 4]) 0 から 4 までの数値をランダムに選択して、指定された方向にどれだけ進むかを Python に指示します。 移動方向と移動距離を掛けて、X 軸と Y 軸に沿った移動距離を決定します。 x_step が正の場合は右に移動し、負の場合は左に移動し、0 の場合は垂直に移動し、y_step が正の場合は上に移動し、負の場合は、 0 の場合は下に移動し、0 の場合は水平に移動します。両方とも 0 の場合は、静止していると考えて、この状況を拒否し、次のサイクルを続行します。 <p> ランダム ウォークの次のポイントの x 値を取得するには、x_step と x_values の最後の値を加算し、y 値についても同じことを行います。次の点の x 値と y 値を取得した後、それをリスト x_values と y_values の最後にそれぞれ追加します。 <br><br><br>ランダム ウォーク グラフの描画</p><p><strong>RandomWalk クラスを作成した py ファイルには、random_walk.py という名前を付けました。 </strong> 次のコードは、ランダム ウォークのすべてのポイントをプロットします: </p><pre class="brush:php;toolbar:false">import matplotlib.pyplot as pltfrom random_walk import RandomWalk# 创建一个RandWalk实例,并将其包含的点都绘制出来rw = RandomWalk(5000)rw.fill_walk()plt.scatter(rw.x_values, rw.y_values, s=15)plt.show()
最初にモジュール pyplot と RandomWalk クラスをインポートし、次に RandomWalk インスタンスを作成して rw に保存し、次に fill_walk() を呼び出します。次の図は、5000 ポイントを含むランダム ウォーク グラフを示しています。
複数のランダム ウォークをシミュレートする
ランダム ウォークはそれぞれ異なるため、生成される可能性のあるさまざまなパターンを探索するのは楽しいです。プログラムを複数回実行せずに、前のコードを使用して複数のランダム ウォークをシミュレートする 1 つの方法は、以下に示すように、前のコードを while ループに入れることです。
import matplotlib.pyplot as pltfrom random_walk import RandomWalkwhile True: # 创建一个RandWalk实例,并将其包含的点都绘制出来 rw = RandomWalk(5000) rw.fill_walk() plt.scatter(rw.x_values, rw.y_values, s=1) plt.show() keep_running = input('Make another walk? (y/n) : ') if keep_running == 'n': break
ポイントに色を付ける
色を使用してウォーク内のポイントの順序をマッピングし、色をより明確にするために各ポイントの黒い輪郭を削除します。 。ウォーク内のポイントの順序に基づいて色を付けるには、パラメーター c を渡し、ポイントの順序を含むリストを設定します。これらの点は順番に描画されるため、パラメータ c で指定されるリストには 1 ~ 5000 の数字だけが含まれていれば十分です。以下に示すように:
import matplotlib.pyplot as pltfrom random_walk import RandomWalkwhile True: # 创建一个RandWalk实例,并将其包含的点都绘制出来 rw = RandomWalk(5000) rw.fill_walk() point_numbers = list(range(rw.number_points)) plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues, edgecolors='none', s=1) plt.show() keep_running = input('Make another walk? (y/n) : ') if keep_running == 'n': break
開始点と終了点を再描画します。
ランダム ウォーク ポイントを色付けして順序を示すことに加えて、 , ランダムウォークの終了点と開始点も表示できれば良いですね。これを行うには、ランダム ウォーク図を描画した後に、ランダム ウォークの開始点と終了点を再描画します。次のように、開始点と終了点を大きくし、異なる色で強調表示しました。 为突出起点,我们使用绿色绘制点(0,0),并使其比其它点大。为突出终点,我们在漫步包含的最后一个x值和y值处绘制一个点,使其为红色,并比其它点大。运行代码,将准确知道每次随机漫步的起点和终点。 隐藏坐标轴 下面来隐藏坐标轴,以免我们注意点是坐标轴而不是随机漫步路径。要隐藏坐标做代码如下: 为修改坐标轴,使用函数plt.axes()来将每条坐标轴的可见性设置为False。图如下: 相关免费学习推荐:python教程(视频)import matplotlib.pyplot as pltfrom random_walk import RandomWalkwhile True:
# 创建一个RandWalk实例,并将其包含的点都绘制出来
rw = RandomWalk(5000)
rw.fill_walk()
point_numbers = list(range(rw.number_points))
plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues, edgecolors='none', s=1)
# 突出起点和终点
plt.scatter(0, 0, c='green', edgecolors='none', s=100)
plt.scatter(rw.x_values[-1], rw.y_values[-1], c='red', edgecolors='none', s=100)
plt.show()
keep_running = input('Make another walk? (y/n) : ')
if keep_running == 'n':
break
# 隐藏坐标轴plt.axes().get_xaxis().set_visible(False)plt.axes().get_yaxis().set_visible(False)
以上がPythonのランダムウォークの説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。