# 無料学習の推奨事項: 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これらのコードは、ランダム ウォークをシミュレートします。 y を入力するとランダム ウォークのシミュレーションと生成が続行され、n を入力するとプログラムが終了します。
ポイントに色を付ける
色を使用してウォーク内のポイントの順序をマッピングし、色をより明確にするために各ポイントの黒い輪郭を削除します。 。ウォーク内のポイントの順序に基づいて色を付けるには、パラメーター 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': breakrange を使用して、ウォークに含まれるのと同じ数のポイントを含む数値のリストを生成します。次に、このリストを point_numbers に保存して、各歩行ポイントの色を設定するために使用できるようにします。各パラメータ c を point_numbers に設定し、カラー マップを青に指定し、引数edgecolors を渡して各点の周囲の輪郭を削除します。最終的なランダム ウォーク グラフは、水色から濃い青へのグラデーションになります。以下の図に示すように:
開始点と終了点を再描画します。
ランダム ウォーク ポイントを色付けして順序を示すことに加えて、 , ランダムウォークの終了点と開始点も表示できれば良いですね。これを行うには、ランダム ウォーク図を描画した後に、ランダム ウォークの開始点と終了点を再描画します。次のように、開始点と終了点を大きくし、異なる色で強調表示しました。 为突出起点,我们使用绿色绘制点(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 サイトの他の関連記事を参照してください。