Python绘制随机游走图

Python绘制随机游走图

文章目录

    • Python绘制随机游走图
      • 随机游走图
      • 随机游走图的意义
      • Python实现随机游走图
      • Python随机游走图案例
        • random_walk.py
        • main.py
        • 运行结果图
          • 结果一
          • 结果二
          • 结果三
          • 结果四
          • 结果五
      • 总结

随机游走图

随机游走图通常指的是一种图论中的模型,其中节点在图中随机移动。这种模型经常用于描述一些随机过程,比如在网络中传播信息、分析社交网络中的节点行为,或者模拟粒子在空间中的运动等。

在随机游走图中,节点通过一系列随机的步骤在图中移动,每一步的移动通常是根据某种概率分布确定的。这种模型可以用来研究节点之间的关联性、信息扩散的过程、网络的性质等。随机游走图在许多领域都有应用,包括社交网络分析、搜索引擎算法、生物信息学等。

一种常见的随机游走模型是马尔可夫链,其中节点在图中随机移动,并且下一步的移动只依赖于当前节点的状态,而不受之前移动的影响。此外,还有其他类型的随机游走图,如随机游走在加权图中的版本,其中边上有权重,影响节点之间的转移概率。

总的来说,随机游走图是一种用来描述节点在图中随机移动的模型,有助于研究图结构的性质和相关的随机过程。

随机游走图的意义

随机游走图在图论和网络科学中有许多重要的意义,其中一些主要包括:

  1. 信息传播分析: 随机游走图模型可以用来研究信息在网络中的传播过程。通过模拟节点之间的随机移动,可以了解信息在网络中的扩散速度、范围和影响力。这对于理解病毒传播、社交网络中的信息传播以及广告传播等具有实际应用。

  2. 网络分析和中心性度量: 随机游走图有助于分析节点在网络中的中心性。例如,通过模拟随机游走,可以计算节点被访问的频率,从而评估节点的重要性。这对于确定网络中的关键节点、社交网络中的重要人物等方面具有重要意义。

  3. 搜索引擎算法: 随机游走图在搜索引擎算法中有广泛应用,如PageRank算法。这些算法使用节点之间的随机游走来确定网页的排名,将重要性高的网页排在搜索结果的前面。

  4. 社交网络分析: 在社交网络中,随机游走图有助于理解用户行为、社交关系以及信息传播的动态过程。这对于社交网络营销、推荐系统等方面具有重要价值。

  5. 马尔可夫链和平稳分布: 随机游走图中的马尔可夫链理论对于研究随机过程的平稳性质、收敛行为等方面非常有用。这有助于理解在长时间尺度上节点的分布情况。

总的来说,随机游走图的意义在于提供了一种框架,通过模拟节点在图中的随机移动,有助于深入研究网络结构、信息传播、节点重要性等方面的性质,从而对复杂系统的行为进行建模和分析。

Python实现随机游走图

在Python中,你可以使用网络分析库 NetworkX 来实现随机游走图。以下是一个简单的例子,演示如何使用 NetworkX 创建一个图并进行随机游走:

首先,确保你已经安装了 NetworkX:

pip install networkx

然后,可以使用以下代码实现随机游走图:

import networkx as nx
import random
import matplotlib.pyplot as pltdef random_walk(graph, start_node, steps):current_node = start_nodevisited_nodes = [current_node]for _ in range(steps):neighbors = list(graph.neighbors(current_node))if not neighbors:break  # No neighbors, stop the walkcurrent_node = random.choice(neighbors)visited_nodes.append(current_node)return visited_nodes# 创建一个简单的图
G = nx.Graph()
G.add_edges_from([(1, 2), (2, 3), (3, 4), (4, 1), (2, 4)])# 随机游走
start_node = 1
steps = 10
walk_result = random_walk(G, start_node, steps)# 打印结果
print("Random Walk Result:", walk_result)# 可视化图和随机游走路径
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, font_weight='bold', node_color='lightblue')
plt.plot(walk_result, marker='o', color='red', label='Random Walk Path')
plt.legend()
plt.show()

这个例子创建了一个简单的无向图,然后使用 random_walk 函数模拟了从起始节点开始的随机游走。结果包括游走路径和可视化图。你可以根据需要调整图的结构、起始节点和步数。这只是一个简单的示例,实际上,随机游走可以根据不同的需求进行更复杂的定制。

当然,你可以使用 Matplotlib 来绘制一个简单的游走图,不依赖于 NetworkX。以下是一个基本的示例:

import matplotlib.pyplot as plt
import randomdef random_walk(steps):x = [0]  # 节点的 x 坐标y = [0]  # 节点的 y 坐标for _ in range(steps):# 随机决定下一步的方向(上、下、左、右)direction = random.choice(['up', 'down', 'left', 'right'])# 根据方向更新坐标if direction == 'up':y.append(y[-1] + 1)x.append(x[-1])elif direction == 'down':y.append(y[-1] - 1)x.append(x[-1])elif direction == 'left':x.append(x[-1] - 1)y.append(y[-1])elif direction == 'right':x.append(x[-1] + 1)y.append(y[-1])return x, y# 设置步数
steps = 100# 随机游走路径
x, y = random_walk(steps)# 绘制随机游走图
plt.plot(x, y, marker='o', linestyle='-', color='b')
plt.title('Random Walk')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()

这个例子创建了一个简单的二维游走图,节点通过随机选择上、下、左、右四个方向的步骤进行移动。你可以调整步数和其他参数以满足你的需求。这种简单的方法并不考虑图的结构,但它可以展示一个节点在二维平面上的随机移动过程。

Python随机游走图案例

random_walk.py
from random import choiceclass RandomWalk():'''一个生成随机漫步数据的类'''def __init__(self,num_points):'''初始化随机漫步的属性'''self.num_points = num_points# 定义出坐标系列表,所有随机漫步都始于(0,0)self.x_values = [0]self.y_values = [0]def fill_walks(self):'''计算随机漫步包含的所有点'''# 不断漫步,直到列表到达指定的长度while len(self.x_values) < self.num_points:# 决定 x 前进方向(可以更换成2,-2,甚至更大)x_direction = choice([1,-1])# 决定 x 前进的距离:1 2 3 4 5 6 7x_distance = choice([0,1,2,3,4,5,6,7])# 最终 x 的步长是:方向 * 距离x_step = x_direction * x_distance# 决定 y 前进方向以及沿这个方向前进的距离y_direction = choice([1,-1])y_distance = choice([0,1,2,3,4,5,6,7])y_step = y_direction * y_distance# 拒绝原地踏步if x_step == 0 and y_step == 0:continue# 计算下一个点的 x值 和 y值next_x = self.x_values[-1] + x_stepnext_y = self.y_values[-1] + y_step# 将计算好的下一个 x 和 y 加载到 坐标系列表中self.x_values.append(next_x)self.y_values.append(next_y)pass
main.py
import matplotlib.pyplot as plt
from random_walk import RandomWalk# 只要程序处于活动状态,就不断地模拟随机漫步的过程
while True:# 创建一个 RandomWalk 实例,并将其包含的点都绘制出来# 这里的 30000 是可以随机更改的,建议不用太多,也不能太少rw = RandomWalk(30000)rw.fill_walks()point_numbers = list(range(rw.num_points))# 突出起点, 用绿色标注出来 ,尺寸大小为: 100plt.scatter(0,0,c = 'green',edgecolors = 'none',s = 100)# 绘制漫步过程,颜色越来越深,体现出前后顺序plt.scatter(rw.x_values,rw.y_values,c = point_numbers,cmap = plt.cm.Blues,edgecolor = 'none',s = 3)# plt.plot(rw.x_values, rw.y_values,linewidth = 3)# 突出终点,用红色标注出来,尺寸大小为:20# plt.scatter(rw.x_values[-1],rw.y_values[-1],c = 'red',edgecolors = 'none',s = 20)# 设置随机漫步图的样式plt.title('Random Walk',fontsize = 24)plt.xlabel('X Values',fontsize = 14)plt.ylabel('Y Values',fontsize = 14)# 隐藏坐标轴# plt.axes().get_xaxis().set_visible(False)# plt.axes().get_yaxis().set_visible(False)# plt.savefig('random_walk.png',bbox_inches = 'tight')# 现实图片plt.show()# 多次展示图片,如果不输入:n 或者 N,就一直输出图片keep_running = input('Make another walk?(Y/N):')if keep_running == 'N' or keep_running == 'n':break
运行结果图
结果一

在这里插入图片描述

结果二

在这里插入图片描述

结果三

在这里插入图片描述

结果四

在这里插入图片描述

结果五

在这里插入图片描述

总结

随机游走图是图论中的一种模型,用于描述节点在图中随机移动的过程。其主要意义包括:

  1. 信息传播分析: 通过模拟节点之间的随机移动,可以研究信息在网络中的传播过程,有助于理解病毒传播、社交网络中的信息传播等。

  2. 网络分析和中心性度量: 随机游走图有助于分析节点在网络中的中心性,帮助确定关键节点、社交网络中的重要人物等。

  3. 搜索引擎算法: 应用于搜索引擎算法,如PageRank,通过节点之间的随机游走来确定网页排名。

  4. 社交网络分析: 用于理解社交网络中用户行为、社交关系以及信息传播的动态过程,对社交网络营销、推荐系统等有重要价值。

  5. 马尔可夫链和平稳分布: 随机游走图中的马尔可夫链理论有助于研究随机过程的平稳性质和收敛行为。

在Python中,可使用 NetworkX 、 Matplotlib (matlab给python的接口) 库实现随机游走图,通过模拟节点在图中的随机移动,对网络结构、信息传播和节点重要性等性质进行建模和分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/670016.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于BiLSTM-CRF模型的分词、词性标注、信息抽取任务的详解,侧重模型推导细化以及LAC分词实践

基于BiLSTM-CRF模型的分词、词性标注、信息抽取任务的详解,侧重模型推导细化以及LAC分词实践 1.GRU简介 GRU(Gate Recurrent Unit)门控循环单元,是[循环神经网络](RNN)的变种种,与 LSTM 类似通过门控单元解决 RNN 中不能长期记忆和反向传播中的梯度等问题。与 LSTM 相…

华为视频监控接入到视频监控平台 (华为网路监控摄像机IPC和华为视频节点设备VCN)

目 录 一、设备介绍 1.1 华为VCN介绍 1.2 AS-V1000视频监控平台介绍 1.3 平台服务器配置说明 二、安装、配置HW_IVS软件 2.1下载安装HW_IVS软件 2.2登录HW_IVS 2.3共享到外域 三、配置华为外域参数 3.1 PCG模块设置 3.2通信协议GBT28181配置 3.3传…

netty-websocket扩展协议及token鉴权补充

文章源码&#xff1a;gitee 源码部分可以看上一篇文章中的源码分析netty-websocket 鉴权token及统一请求和响应头&#xff08;鉴权控制器&#xff09; 最近刚好没事&#xff0c;看到有朋友说自定义协议好搞&#xff0c;我就想了想&#xff0c;发现上面那种方式实现确实麻烦&…

远程桌面使用Pr剪视频

要远程访问高性能计算机并使用 Pr&#xff08;Adobe Premiere Pro&#xff09;进行视频编辑&#xff0c;您可以考虑使用流畅且响应迅速的远程桌面软件。您可以考虑以下选项。 Splashtop Business Access Performance Splashtop 以其高性能远程桌面解决方案而闻名&#xff0c;…

HarmonyOS远程真机调试方法

生成密钥库文件 打开DevEco Studio&#xff0c;点击菜单栏上的build&#xff0c; 填一些信息点击&#xff0c;没有key的话点击new一个新的key。 生成profile文件 AppGallery Connect (huawei.com) 进入该链接网站&#xff0c;点击用户与访问将刚生成的csr证书提交上去其中需…

地下停车场智慧监查系统:科技让停车更智能

随着城市化进程的加速&#xff0c;停车难成为了许多城市居民的痛点。而地下停车场作为解决停车难问题的重要手段&#xff0c;其安全性和便捷性也成为了人们关注的焦点。为了解决这一问题&#xff0c;山海鲸可视化搭建的地下停车场智慧监查系统应运而生&#xff0c;为车主们提供…

【极数系列】Flink集成KafkaSink 实时输出数据(11)

文章目录 01 引言02 连接器依赖2.1 kafka连接器依赖2.2 base基础依赖 03 使用方法04 序列化器05 指标监控06 项目源码实战6.1 包结构6.2 pom.xml依赖6.3 配置文件6.4 创建sink作业 01 引言 KafkaSink 可将数据流写入一个或多个 Kafka topic 实战源码地址,一键下载可用&#xf…

查大数据检测到风险等级太高是怎么回事?

随着金融风控越来越多元化&#xff0c;大数据作为新兴的技术被运用到贷前风控中去了&#xff0c;不少人也了解过自己的大数据&#xff0c;但是由于相关知识不足&#xff0c;看不懂报告&#xff0c;在常见的问题中&#xff0c;大数据检测到风险等级太高是怎么回事呢?小易大数据…

Oracle systemstate、gdb、dbx介绍

当数据库出现严重的性能问题或者hang了的时候&#xff0c; 可能最常用的办法就是重启数据库&#xff0c;简单有效解决问题&#xff1b;但是重启后如何追踪问题的根本原因成了难题&#xff0c;很多信息随着重启也消失不见了&#xff0c;让追查问题变的十分棘手&#xff0c;这时就…

别具一格,质感拉满 | PITAKA苹果Apple Watch彩碳表带开箱

别具一格&#xff0c;质感拉满 | PITAKA苹果Apple Watch彩碳表带开箱 我是在前年的时候购买的目前手头这款Apple Watch Series7&#xff0c;因为是购买的Nike版&#xff0c;所以可以看到它的表带标配为透气孔的运动型表带。 &#x1f53a;耐克版的透气孔表带虽说在一定程度上解…

OpenStack安全策略提升

1.规划节点 IP主机名节点192.168.100.10controllerOpenStack控制节点192.168.100.20computeOpenStack计算节点 2.环境准备​ 使用OpenStack平台的两台节点&#xff0c;节点规划表中的IP地址为作者的IP地址&#xff0c;在进行实操案例的时候&#xff0c;按照自己的环境规划网络…

Three.js学习6:透视相机和正交相机

一、相机 相机 camera&#xff0c;可以理解为摄像机。在拍影视剧的时候&#xff0c;最终用户看到的画面都是相机拍出来的内容。 Three.js 里&#xff0c;相机 camera 里的内容就是用户能看到的内容。从这个角度来看&#xff0c;相机其实就是用户的视野&#xff0c;就像用户的眼…

【cmu15445c++入门】(6)c++的迭代器

一、迭代器 C 迭代器是指向容器内元素的对象。它们可用于循环访问该容器的对象。我们知道迭代器的一个示例是指针。指针可用于循环访问 C 样式数组. 二、代码 自己实现一个迭代器 // C iterators are objects that point to an element inside a container. // They can be…

学习与学习理论 - 2024教招

一 学习的概述 1 学习的概念及其内涵 &#xff08;1&#xff09;学习的概念 学习是个体在特定情境下由于练习和反复经验而产生的行为或行为潜能的比较持久的变化。 人类的学习和动物学习的本质区别 人类学习是一个积极、主动的建构过程;人类的学习是掌握社会历史经验和个体经…

University Program VWF仿真步骤__全加器

本教程将以全加器为例&#xff0c;选择DE2-115开发板的Cyclone IV EP4CE115F29C7 FPGA&#xff0c;使用Quartus Lite v18.1&#xff0c;循序渐进的介绍如何创建Quartus工程&#xff0c;并使用Quartus Prime软件的University Program VWF工具创建波形文件&#xff0c;对全加器的…

生物素-PEG4-酪胺,Biotin-PEG4-TSA,应用于酶联免疫吸附实验

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;生物素-PEG4-酪胺&#xff0c;Biotin-PEG4-Tyramide&#xff0c;Biotin-PEG4-TSA 一、基本信息 产品简介&#xff1a;Biotin PEG4 Tyramine is a reagent used for tyramine signal amplification (TSA) through ca…

5-2、S曲线计算【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】&#xff0c;查看本系列全部文章 摘要&#xff1a;本节介绍S曲线的基本变换&#xff0c;将基本形式的S曲线变换成为任意过两点的S曲线&#xff0c;为后续步进电机S曲线运动提供理论支撑 一.计算目标 ①计算经过任意不同两点的S曲线方程 ②可调节曲线平…

C++之字符串

C风格字符串 字符串处理在程序中应用广泛&#xff0c;C风格字符串是以\0&#xff08;空字符&#xff09;来结尾的字符数组。对字符串进行操作的C函数定义在头文件<string.h>或中。常用的库函数如下&#xff1a; //字符检查函数(非修改式操作) size_t strlen( const char …

linux麒麟系统安装mongodb7.0

1.mogedb下载 下载的是他tar包 https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-7.0.5.tgz wget -o https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-7.0.5.tgz 也可以下载rpm包 2.将包上传至服务器并解压 #进入目录 并解压 cd /opt/ tar …

【 buuctf-另外一个世界】

flag 就隐藏在这一串二进制数中&#xff0c;可以利用在线工具转换得到 flag&#xff0c;本次讲一下用代码怎么转换。将二进制数转换成 ascii 字母&#xff0c;手写的话两种思路&#xff1a; 1.将二进制数四位一组先转成十六进制数&#xff0c;再将十六进制数两位一组&#xff…