>  기사  >  백엔드 개발  >  파이썬 랜덤 워크 설명

파이썬 랜덤 워크 설명

coldplay.xixi
coldplay.xixi앞으로
2021-01-15 10:06:193654검색

ㅋㅋㅋ

무작위 걷기 각 걷기는 완전히 무작위이며 명확한 방향이 없으며 결과는 일련의 무작위 결정에 의해 결정됩니다. 이렇게 생각하시면 됩니다. 랜덤워크는 개미가 혼란스러울 때마다 임의의 방향으로 가는 길입니다. 파이썬 랜덤 워크 설명RandomWalk() 클래스 만들기

무작위 걷기를 시뮬레이션하기 위해 앞으로 이동할 방향을 무작위로 선택하는 RandownWalk 클래스를 만듭니다. 이 클래스에는 세 가지 속성이 필요합니다. 그 중 하나는 랜덤 워크 횟수를 저장하는 변수이고, 다른 두 개는 랜덤 워크가 통과한 각 지점의 x 좌표와 y 좌표를 저장하는 리스트입니다. RandomWalk 클래스에는 init() 및 fill_walk()라는 두 가지 메서드만 포함되어 있으며, 여기서 후자는 랜덤 워크가 통과한 모든 점을 계산합니다. 다음은 입니다:

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 값과 A를 저장하기 위해 두 개를 만듭니다. y 값 목록을 만들고 각 걷기가 (0,0)에서 시작하도록 합니다.

방향 선택

    def fill_walk(self):
        """计算随机漫步中包含的所有点"""

        # 不断漫步,直到列表达到指定的长度
        while len(self.x_values) <br>걷기에 필요한 포인트 수가 모두 포함될 때까지 계속되는 루프를 설정합니다. 이 메서드의 주요 부분은 Python에게 네 가지 방황 결정(왼쪽으로 갈 것인가, 오른쪽으로 갈 것인가?)을 시뮬레이션하는 방법을 알려줍니다. 올라갈까, 내려갈까? 주어진 방향을 따라 얼마나 멀리 떨어져 있나요?  choice([1, -1])를 사용하여 x_direction 값을 선택합니다. 결과는 오른쪽으로 가는 것을 의미하는 1이거나 왼쪽으로 가는 것을 의미하는 -1입니다. 3 , 4]) 0에서 4 사이의 숫자를 무작위로 선택하고 Python에게 지정된 방향으로 얼마나 멀리 가야 하는지 알려줍니다. <p> 이동 방향에 이동 거리를 곱하여 x축과 y축을 따라 이동한 거리를 결정합니다. x_step이 양수이면 오른쪽으로 이동하고, 음수이면 왼쪽으로 이동하고, 0이면 수직으로 이동하고, y_step이 양수이면 위로 이동하고, 음수이면 위로 이동합니다. 아래로 이동하고, 0이면 수평으로 이동하며, 둘 다 0이면 가만히 있다고 생각하고 이 상황을 거부하고 다음 사이클을 실행합니다. <strong> 랜덤 워크에서 다음 지점의 x 값을 얻으려면 x_step과 x_values의 마지막 값을 더하고 y 값에 대해서도 동일한 작업을 수행합니다. 다음 지점의 x값과 y값을 얻은 후 이를 각각 x_values ​​및 y_values ​​목록의 끝에 추가합니다. </strong></p><p>랜덤 워크 그래프 그리기<br><strong></strong>RandomWalk 클래스에 대해 위에서 생성한 py 파일 이름을 random_walk.py로 지정했습니다. <code>__init__()</code> 다음 코드는 무작위 걷기의 모든 지점을 표시합니다. </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개의 포인트가 포함된 걷기 그래프.

여러 랜덤 걷기 시뮬레이션


각각의 랜덤 걷기는 다르기 때문에 생성될 수 있는 다양한 패턴을 탐색하는 것이 재미있습니다. 이전 코드를 사용하여 프로그램을 여러 번 실행하지 않고 여러 무작위 걷기를 시뮬레이션하는 한 가지 방법은 아래와 같이 이전 코드를 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':
        break
범위를 사용하여 걷기에 포함된 포인트 수와 동일한 숫자 목록을 생성했습니다. 다음으로, 이 목록을 point_numbers에 저장하여 각 보행 지점의 색상을 설정하는 데 사용할 수 있습니다. 각 매개변수 c를 point_numbers로 설정하고, 색상 맵을 파란색으로 지정하고, edgecolors 인수를 전달하여 각 점 주위의 윤곽선을 제거합니다. 최종 랜덤 워크 그래프는 연한 파란색에서 진한 파란색으로 그라데이션됩니다. 아래 그림과 같이:

파이썬 랜덤 워크 설명

시작점과 끝점을 다시 그립니다.

무작위 걷기의 지점을 색칠하여 순서를 표시하는 것 외에도 무작위 걷기의 끝과 시작점이 있으면 더 좋을 것입니다. 산책도 표시할 수 있습니다. 이를 위해서는 랜덤 워크 다이어그램을 그린 후 랜덤 워크의 시작점과 끝점을 다시 그릴 수 있습니다. 다음과 같이 시작점과 끝점을 더 크게 만들고 다른 색상으로 강조 표시했습니다.

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

파이썬 랜덤 워크 설명

为突出起点,我们使用绿色绘制点(0,0),并使其比其它点大。为突出终点,我们在漫步包含的最后一个x值和y值处绘制一个点,使其为红色,并比其它点大。运行代码,将准确知道每次随机漫步的起点和终点。

隐藏坐标轴

下面来隐藏坐标轴,以免我们注意点是坐标轴而不是随机漫步路径。要隐藏坐标做代码如下:

# 隐藏坐标轴plt.axes().get_xaxis().set_visible(False)plt.axes().get_yaxis().set_visible(False)

为修改坐标轴,使用函数plt.axes()来将每条坐标轴的可见性设置为False。图如下:
파이썬 랜덤 워크 설명

相关免费学习推荐:python教程(视频)

위 내용은 파이썬 랜덤 워크 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제