欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用Python繪制隨機(jī)游走圖的詳細(xì)過(guò)程

 更新時(shí)間:2024年02月18日 10:50:01   作者:hhh江月  
隨機(jī)游走(random walk)也稱隨機(jī)漫步,隨機(jī)行走等,是以隨機(jī)的方式采取連續(xù)步驟的過(guò)程,下面這篇文章主要給大家介紹了關(guān)于利用Python繪制隨機(jī)游走圖的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

隨機(jī)游走圖

隨機(jī)游走圖通常指的是一種圖論中的模型,其中節(jié)點(diǎn)在圖中隨機(jī)移動(dòng)。這種模型經(jīng)常用于描述一些隨機(jī)過(guò)程,比如在網(wǎng)絡(luò)中傳播信息、分析社交網(wǎng)絡(luò)中的節(jié)點(diǎn)行為,或者模擬粒子在空間中的運(yùn)動(dòng)等。

在隨機(jī)游走圖中,節(jié)點(diǎn)通過(guò)一系列隨機(jī)的步驟在圖中移動(dòng),每一步的移動(dòng)通常是根據(jù)某種概率分布確定的。這種模型可以用來(lái)研究節(jié)點(diǎn)之間的關(guān)聯(lián)性、信息擴(kuò)散的過(guò)程、網(wǎng)絡(luò)的性質(zhì)等。隨機(jī)游走圖在許多領(lǐng)域都有應(yīng)用,包括社交網(wǎng)絡(luò)分析、搜索引擎算法、生物信息學(xué)等。

一種常見(jiàn)的隨機(jī)游走模型是馬爾可夫鏈,其中節(jié)點(diǎn)在圖中隨機(jī)移動(dòng),并且下一步的移動(dòng)只依賴于當(dāng)前節(jié)點(diǎn)的狀態(tài),而不受之前移動(dòng)的影響。此外,還有其他類(lèi)型的隨機(jī)游走圖,如隨機(jī)游走在加權(quán)圖中的版本,其中邊上有權(quán)重,影響節(jié)點(diǎn)之間的轉(zhuǎn)移概率。

總的來(lái)說(shuō),隨機(jī)游走圖是一種用來(lái)描述節(jié)點(diǎn)在圖中隨機(jī)移動(dòng)的模型,有助于研究圖結(jié)構(gòu)的性質(zhì)和相關(guān)的隨機(jī)過(guò)程。

隨機(jī)游走圖的意義

隨機(jī)游走圖在圖論和網(wǎng)絡(luò)科學(xué)中有許多重要的意義,其中一些主要包括:

  • 信息傳播分析: 隨機(jī)游走圖模型可以用來(lái)研究信息在網(wǎng)絡(luò)中的傳播過(guò)程。通過(guò)模擬節(jié)點(diǎn)之間的隨機(jī)移動(dòng),可以了解信息在網(wǎng)絡(luò)中的擴(kuò)散速度、范圍和影響力。這對(duì)于理解病毒傳播、社交網(wǎng)絡(luò)中的信息傳播以及廣告?zhèn)鞑サ染哂袑?shí)際應(yīng)用。

  • 網(wǎng)絡(luò)分析和中心性度量: 隨機(jī)游走圖有助于分析節(jié)點(diǎn)在網(wǎng)絡(luò)中的中心性。例如,通過(guò)模擬隨機(jī)游走,可以計(jì)算節(jié)點(diǎn)被訪問(wèn)的頻率,從而評(píng)估節(jié)點(diǎn)的重要性。這對(duì)于確定網(wǎng)絡(luò)中的關(guān)鍵節(jié)點(diǎn)、社交網(wǎng)絡(luò)中的重要人物等方面具有重要意義。

  • 搜索引擎算法: 隨機(jī)游走圖在搜索引擎算法中有廣泛應(yīng)用,如PageRank算法。這些算法使用節(jié)點(diǎn)之間的隨機(jī)游走來(lái)確定網(wǎng)頁(yè)的排名,將重要性高的網(wǎng)頁(yè)排在搜索結(jié)果的前面。

  • 社交網(wǎng)絡(luò)分析: 在社交網(wǎng)絡(luò)中,隨機(jī)游走圖有助于理解用戶行為、社交關(guān)系以及信息傳播的動(dòng)態(tài)過(guò)程。這對(duì)于社交網(wǎng)絡(luò)營(yíng)銷(xiāo)、推薦系統(tǒng)等方面具有重要價(jià)值。

  • 馬爾可夫鏈和平穩(wěn)分布: 隨機(jī)游走圖中的馬爾可夫鏈理論對(duì)于研究隨機(jī)過(guò)程的平穩(wěn)性質(zhì)、收斂行為等方面非常有用。這有助于理解在長(zhǎng)時(shí)間尺度上節(jié)點(diǎn)的分布情況。

總的來(lái)說(shuō),隨機(jī)游走圖的意義在于提供了一種框架,通過(guò)模擬節(jié)點(diǎn)在圖中的隨機(jī)移動(dòng),有助于深入研究網(wǎng)絡(luò)結(jié)構(gòu)、信息傳播、節(jié)點(diǎn)重要性等方面的性質(zhì),從而對(duì)復(fù)雜系統(tǒng)的行為進(jìn)行建模和分析。

Python實(shí)現(xiàn)隨機(jī)游走圖

在Python中,你可以使用網(wǎng)絡(luò)分析庫(kù) NetworkX 來(lái)實(shí)現(xiàn)隨機(jī)游走圖。以下是一個(gè)簡(jiǎn)單的例子,演示如何使用 NetworkX 創(chuàng)建一個(gè)圖并進(jìn)行隨機(jī)游走:

首先,確保你已經(jīng)安裝了 NetworkX:

pip install networkx

然后,可以使用以下代碼實(shí)現(xiàn)隨機(jī)游走圖:

import networkx as nx
import random
import matplotlib.pyplot as plt

def random_walk(graph, start_node, steps):
    current_node = start_node
    visited_nodes = [current_node]

    for _ in range(steps):
        neighbors = list(graph.neighbors(current_node))
        if not neighbors:
            break  # No neighbors, stop the walk
        current_node = random.choice(neighbors)
        visited_nodes.append(current_node)

    return visited_nodes

# 創(chuàng)建一個(gè)簡(jiǎn)單的圖
G = nx.Graph()
G.add_edges_from([(1, 2), (2, 3), (3, 4), (4, 1), (2, 4)])

# 隨機(jī)游走
start_node = 1
steps = 10
walk_result = random_walk(G, start_node, steps)

# 打印結(jié)果
print("Random Walk Result:", walk_result)

# 可視化圖和隨機(jī)游走路徑
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()

這個(gè)例子創(chuàng)建了一個(gè)簡(jiǎn)單的無(wú)向圖,然后使用 random_walk 函數(shù)模擬了從起始節(jié)點(diǎn)開(kāi)始的隨機(jī)游走。結(jié)果包括游走路徑和可視化圖。你可以根據(jù)需要調(diào)整圖的結(jié)構(gòu)、起始節(jié)點(diǎn)和步數(shù)。這只是一個(gè)簡(jiǎn)單的示例,實(shí)際上,隨機(jī)游走可以根據(jù)不同的需求進(jìn)行更復(fù)雜的定制。

當(dāng)然,你可以使用 Matplotlib 來(lái)繪制一個(gè)簡(jiǎn)單的游走圖,不依賴于 NetworkX。以下是一個(gè)基本的示例:

import matplotlib.pyplot as plt
import random

def random_walk(steps):
    x = [0]  # 節(jié)點(diǎn)的 x 坐標(biāo)
    y = [0]  # 節(jié)點(diǎn)的 y 坐標(biāo)

    for _ in range(steps):
        # 隨機(jī)決定下一步的方向(上、下、左、右)
        direction = random.choice(['up', 'down', 'left', 'right'])

        # 根據(jù)方向更新坐標(biāo)
        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

# 設(shè)置步數(shù)
steps = 100

# 隨機(jī)游走路徑
x, y = random_walk(steps)

# 繪制隨機(jī)游走圖
plt.plot(x, y, marker='o', linestyle='-', color='b')
plt.title('Random Walk')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()

這個(gè)例子創(chuàng)建了一個(gè)簡(jiǎn)單的二維游走圖,節(jié)點(diǎn)通過(guò)隨機(jī)選擇上、下、左、右四個(gè)方向的步驟進(jìn)行移動(dòng)。你可以調(diào)整步數(shù)和其他參數(shù)以滿足你的需求。這種簡(jiǎn)單的方法并不考慮圖的結(jié)構(gòu),但它可以展示一個(gè)節(jié)點(diǎn)在二維平面上的隨機(jī)移動(dòng)過(guò)程。

Python隨機(jī)游走圖案例

random_walk.py

from random import choice

class RandomWalk():
    '''一個(gè)生成隨機(jī)漫步數(shù)據(jù)的類(lèi)'''

    def __init__(self,num_points):
        '''初始化隨機(jī)漫步的屬性'''
        self.num_points = num_points

        # 定義出坐標(biāo)系列表,所有隨機(jī)漫步都始于(0,0)
        self.x_values = [0]
        self.y_values = [0]

    def fill_walks(self):
        '''計(jì)算隨機(jī)漫步包含的所有點(diǎn)'''

        # 不斷漫步,直到列表到達(dá)指定的長(zhǎng)度
        while len(self.x_values) < self.num_points:
            # 決定 x 前進(jìn)方向(可以更換成2,-2,甚至更大)
            x_direction = choice([1,-1])
            # 決定 x 前進(jìn)的距離:1 2 3 4 5 6 7
            x_distance = choice([0,1,2,3,4,5,6,7])
            # 最終 x 的步長(zhǎng)是:方向 * 距離
            x_step = x_direction * x_distance

            # 決定 y 前進(jìn)方向以及沿這個(gè)方向前進(jìn)的距離
            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

            # 計(jì)算下一個(gè)點(diǎn)的 x值 和 y值
            next_x = self.x_values[-1] + x_step
            next_y = self.y_values[-1] + y_step

            # 將計(jì)算好的下一個(gè) x 和 y 加載到 坐標(biāo)系列表中
            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

# 只要程序處于活動(dòng)狀態(tài),就不斷地模擬隨機(jī)漫步的過(guò)程
while True:
    # 創(chuàng)建一個(gè) RandomWalk 實(shí)例,并將其包含的點(diǎn)都繪制出來(lái)
    # 這里的 30000 是可以隨機(jī)更改的,建議不用太多,也不能太少
    rw = RandomWalk(30000)
    rw.fill_walks()

    point_numbers = list(range(rw.num_points))
    # 突出起點(diǎn), 用綠色標(biāo)注出來(lái) ,尺寸大小為: 100
    plt.scatter(0,0,c = 'green',edgecolors = 'none',s = 100)
    # 繪制漫步過(guò)程,顏色越來(lái)越深,體現(xiàn)出前后順序
    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)
    # 突出終點(diǎn),用紅色標(biāo)注出來(lái),尺寸大小為:20
    # plt.scatter(rw.x_values[-1],rw.y_values[-1],c = 'red',edgecolors = 'none',s = 20)
    # 設(shè)置隨機(jī)漫步圖的樣式
    plt.title('Random Walk',fontsize = 24)
    plt.xlabel('X Values',fontsize = 14)
    plt.ylabel('Y Values',fontsize = 14)

    # 隱藏坐標(biāo)軸
    # plt.axes().get_xaxis().set_visible(False)
    # plt.axes().get_yaxis().set_visible(False)

    # plt.savefig('random_walk.png',bbox_inches = 'tight')
    # 現(xiàn)實(shí)圖片
    plt.show()

    # 多次展示圖片,如果不輸入:n 或者 N,就一直輸出圖片
    keep_running = input('Make another walk?(Y/N):')
    if keep_running == 'N' or keep_running == 'n':
        break

運(yùn)行結(jié)果圖

結(jié)果一

結(jié)果二

結(jié)果三

結(jié)果四

結(jié)果五

總結(jié)

隨機(jī)游走圖是圖論中的一種模型,用于描述節(jié)點(diǎn)在圖中隨機(jī)移動(dòng)的過(guò)程。其主要意義包括:

  • 信息傳播分析: 通過(guò)模擬節(jié)點(diǎn)之間的隨機(jī)移動(dòng),可以研究信息在網(wǎng)絡(luò)中的傳播過(guò)程,有助于理解病毒傳播、社交網(wǎng)絡(luò)中的信息傳播等。

  • 網(wǎng)絡(luò)分析和中心性度量: 隨機(jī)游走圖有助于分析節(jié)點(diǎn)在網(wǎng)絡(luò)中的中心性,幫助確定關(guān)鍵節(jié)點(diǎn)、社交網(wǎng)絡(luò)中的重要人物等。

  • 搜索引擎算法: 應(yīng)用于搜索引擎算法,如PageRank,通過(guò)節(jié)點(diǎn)之間的隨機(jī)游走來(lái)確定網(wǎng)頁(yè)排名。

  • 社交網(wǎng)絡(luò)分析: 用于理解社交網(wǎng)絡(luò)中用戶行為、社交關(guān)系以及信息傳播的動(dòng)態(tài)過(guò)程,對(duì)社交網(wǎng)絡(luò)營(yíng)銷(xiāo)、推薦系統(tǒng)等有重要價(jià)值。

  • 馬爾可夫鏈和平穩(wěn)分布: 隨機(jī)游走圖中的馬爾可夫鏈理論有助于研究隨機(jī)過(guò)程的平穩(wěn)性質(zhì)和收斂行為。

在Python中,可使用 NetworkX 、 Matplotlib (matlab給python的接口) 庫(kù)實(shí)現(xiàn)隨機(jī)游走圖,通過(guò)模擬節(jié)點(diǎn)在圖中的隨機(jī)移動(dòng),對(duì)網(wǎng)絡(luò)結(jié)構(gòu)、信息傳播和節(jié)點(diǎn)重要性等性質(zhì)進(jìn)行建模和分析。

到此這篇關(guān)于利用Python繪制隨機(jī)游走圖的文章就介紹到這了,更多相關(guān)Python繪制隨機(jī)游走圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python黑魔法@property裝飾器的使用技巧解析

    Python黑魔法@property裝飾器的使用技巧解析

    @property裝飾器能把一個(gè)方法變成屬性一樣來(lái)調(diào)用,下面我們就一起來(lái)看看Python黑魔法@property裝飾器的使用技巧解析
    2016-06-06
  • 打包遷移Python?env環(huán)境的三種方法總結(jié)

    打包遷移Python?env環(huán)境的三種方法總結(jié)

    平常工作中可能遇到python虛擬環(huán)境遷移的場(chǎng)景,總結(jié)了如下幾個(gè)方法,下面這篇文章主要給大家介紹了關(guān)于打包遷移Python?env環(huán)境的三種方法,需要的朋友可以參考下
    2024-08-08
  • Python通用驗(yàn)證碼識(shí)別OCR庫(kù)ddddocr的安裝使用教程

    Python通用驗(yàn)證碼識(shí)別OCR庫(kù)ddddocr的安裝使用教程

    dddd_ocr是一個(gè)用于識(shí)別驗(yàn)證碼的開(kāi)源庫(kù),又名帶帶弟弟ocr,下面這篇文章主要給大家介紹了關(guān)于Python通用驗(yàn)證碼識(shí)別OCR庫(kù)ddddocr的安裝使用教程,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • python導(dǎo)入其它py文件的實(shí)現(xiàn)步驟

    python導(dǎo)入其它py文件的實(shí)現(xiàn)步驟

    本文主要介紹了python導(dǎo)入其它py文件的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • Python統(tǒng)計(jì)序列和文件中元素的頻度

    Python統(tǒng)計(jì)序列和文件中元素的頻度

    這篇文章主要介紹了Python統(tǒng)計(jì)序列和文件中元素的頻度,文章基于python的相關(guān)資料展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值需要的小伙伴可以參考一下
    2022-04-04
  • 使用pyqt5搭建yolo3目標(biāo)識(shí)別界面的方法

    使用pyqt5搭建yolo3目標(biāo)識(shí)別界面的方法

    這篇文章主要介紹了使用pyqt5搭建yolo3目標(biāo)識(shí)別界面的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Pandas檢查dataFrame中的NaN實(shí)現(xiàn)

    Pandas檢查dataFrame中的NaN實(shí)現(xiàn)

    本文主要介紹了Pandas檢查dataFrame中的NaN實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • python pandas分組聚合詳細(xì)

    python pandas分組聚合詳細(xì)

    分組聚合是數(shù)據(jù)處理中常見(jiàn)的場(chǎng)景,在pandas中用groupby方法實(shí)現(xiàn)分組操作,用agg方法實(shí)現(xiàn)聚合操作,在這篇文章里有主要介紹,感興趣的朋友請(qǐng)參考下文
    2021-09-09
  • python3實(shí)現(xiàn)指定目錄下文件sha256及文件大小統(tǒng)計(jì)

    python3實(shí)現(xiàn)指定目錄下文件sha256及文件大小統(tǒng)計(jì)

    這篇文章主要為大家詳細(xì)介紹了python3實(shí)現(xiàn)指定目錄下文件sha256及文件大小統(tǒng)計(jì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Python 文件和輸入輸出小結(jié)

    Python 文件和輸入輸出小結(jié)

    Python 是面向?qū)ο缶幊陶Z(yǔ)言,文件也是一種類(lèi),下面簡(jiǎn)單介紹下,方便需要的朋友
    2013-10-10

最新評(píng)論