Maison >développement back-end >Tutoriel Python >explication de la marche aléatoire en python
Recommandations d'apprentissage gratuites : tutoriel vidéo Python
Marche aléatoire
Cette fois, nous utiliserons python pour générer des données de marche aléatoire, puis utiliserons matplotlib pour présenter les données.
Chaque marche dans une marche aléatoire est complètement aléatoire, sans direction claire, et le résultat est déterminé par une série de décisions aléatoires. Vous pouvez y penser de cette façon : une marche aléatoire est le chemin que les fourmis empruntent dans une direction aléatoire à chaque fois qu'elles sont confuses.
Créer la classe RandomWalk()
Afin de simuler une marche aléatoire, nous créons une classe RandownWalk qui choisit aléatoirement la direction pour avancer. Cette classe nécessite trois attributs, dont l'un est une variable qui stocke le nombre de marches aléatoires, et les deux autres sont des listes qui stockent les coordonnées x et y de chaque point passé par la marche aléatoire.
La classe RandomWalk ne contient que deux méthodes, init() et fill_walk(), où cette dernière calcule tous les points passés par la marche aléatoire. Ce qui suit est __init__()
:
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]<.> est Pour prendre une décision aléatoire, nous stockons tous les choix possibles dans une liste et utilisons Choice() chaque fois qu'une décision est prise pour décider quel choix utiliser, puis nous définissons le nombre de points par défaut pour la marche aléatoire à 5000, Ensuite, nous créons deux listes pour stocker les valeurs x et y, et laissons chaque marche commencer à partir de (0,0).
Choisissez une direction
def fill_walk(self): """计算随机漫步中包含的所有点""" # 不断漫步,直到列表达到指定的长度 while len(self.x_values) Nous créons une boucle qui continue jusqu'à ce que la marche contienne tout le nombre de points requis. La partie principale de cette méthode indique à Python comment simuler quatre décisions d'errance : aller à gauche ou à droite ? Monter ou descendre ? Jusqu'où va-t-on dans la direction donnée ? <p> Nous utilisons choix([1, -1]) pour sélectionner une valeur pour x_direction. Le résultat est soit 1, ce qui signifie aller à droite, soit -1, ce qui signifie aller à gauche. 2 , 3, 4]) Sélectionnez au hasard un nombre entre 0 et 4 pour indiquer à Python jusqu'où aller dans la direction spécifiée. <br> Nous multiplions la direction du mouvement par la distance du mouvement pour déterminer la distance parcourue le long des axes x et y. Si x_step est positif, il se déplacera vers la droite, s'il est négatif, il se déplacera vers la gauche, et s'il est 0, il se déplacera verticalement, si y_step est positif, il montera, s'il est négatif, il descendra, s'il est 0, il se déplacera horizontalement, si les deux sont 0, alors Pensant que nous sommes immobiles, nous rejetons cette situation et continuons le cycle suivant. <br> Pour obtenir la valeur x du point suivant de la marche aléatoire, nous ajoutons la dernière valeur de x_step et x_values, et faisons de même pour la valeur y. Après avoir obtenu la valeur x et la valeur y du point suivant, nous l'ajoutons respectivement à la fin des listes x_values et y_values . <br></p><p>Dessinez un graphique de marche aléatoire<strong></strong></p>Nous nommons le fichier py créé ci-dessus pour la classe RandomWalk random_walk.py. <p> Le code suivant trace tous les points de la marche aléatoire : <br></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()Nous avons d'abord importé le module pyplot et la classe RandomWalk, puis créé une instance RandomWalk, l'avons stockée dans rw, puis avons appelé fill_walk(), la figure suivante montre un graphique de marche aléatoire contenant 5 000 points.
Simuler plusieurs marches aléatoires
Chaque marche aléatoire est différente, il est donc amusant d'explorer les différents modèles qui peuvent être générés. Une façon d'utiliser le code précédent pour simuler plusieurs marches aléatoires sans exécuter le programme plusieurs fois est de mettre le code précédent dans une boucle while, comme indiqué ci-dessous :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': breakCes codes simulent une marche aléatoire, si vous entrez y, vous continuerez à simuler et générer une marche aléatoire. Si vous entrez n, vous quitterez le programme.
Coloration des points
Nous utiliserons la couleur pour cartographier l'ordre des points dans la promenade, et supprimerons le contour noir de chaque point pour rendre leurs couleurs plus évidentes . Pour colorier selon l'ordre des points dans la promenade, on passe le paramètre c et on établit une liste contenant l'ordre des points. Puisque ces points sont dessinés dans l’ordre, la liste spécifiée par le paramètre c ne doit contenir que les nombres 1 à 5 000. Comme indiqué ci-dessous :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': breakNous utilisons la plage pour générer une liste de nombres contenant le même nombre de points que celui que contient la promenade. Ensuite, nous stockons cette liste dans point_numbers afin de pouvoir l'utiliser pour définir la couleur de chaque point de marche. Nous définissons chaque paramètre c sur point_numbers, spécifions que la carte des couleurs soit bleue et passons l'argument edgecolors pour supprimer le contour autour de chaque point. Le graphique de marche aléatoire final passe du bleu clair au bleu foncé. Comme indiqué ci-dessous :
Redessiner le point de départ et le point d'arrivée
En plus de colorer les points de marche aléatoires pour indiquer leur ordre, cela permettrait Ce serait mieux si nous pouvions également montrer la fin et le point de départ de la marche aléatoire. Pour ce faire, vous pouvez redessiner les points de début et de fin de la marche aléatoire après avoir dessiné le diagramme de marche aléatoire. Nous avons agrandi les points de départ et d'arrivée et leur avons attribué une couleur différente pour les mettre en valeur, comme ceci :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教程(视频)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!