collatz序列 python,python馬爾可夫鏈_馬爾可夫鏈的演示Python

 2023-12-06 阅读 38 评论 0

摘要:# -*- coding: utf-8 -*-import numpy as npfrom random import randomcollatz序列 python?#轉移矩陣trans_matrix = np.array([[0.5 , 0.1 , 0.25 , 0.05],[0.15 , 0.5 , 0.2 , 0.05],python 區塊鏈,[0.1 , 0.2 , 0.5 , 0.4],[0.25 , 0.2 , 0.05 , 0.5 ]])#數據dt =

# -*- coding: utf-8 -*-

import numpy as np

from random import random

collatz序列 python?#轉移矩陣

trans_matrix = np.array(

[[0.5 , 0.1 , 0.25 , 0.05],

[0.15 , 0.5 , 0.2 , 0.05],

python 區塊鏈,[0.1 , 0.2 , 0.5 , 0.4],

[0.25 , 0.2 , 0.05 , 0.5 ]])

#數據

dt = np.array([[0] , [1] , [0] , [0]])

python鏈表,#進行轉換

res = np.dot(trans_matrix,dt)

res = np.dot(trans_matrix , res) #50次

'''

python獲取鏈表長度。#執行50次后,基本穩定

array([[ 0.22720144],

[ 0.21947408],

[ 0.31993815],

[ 0.23338634]])

'''

#真實模擬

#狀態計數器, 四個數分別代表停留在此狀態的次數

cnt_list = [0 , 0 , 0 , 0] # 0 1 2 3

#初始狀態 0 1 2 3 隨意

origin = 2

#當前狀態設為初始狀態

now = origin

cnt = 0

while True :

#進行1000000次狀態轉移

cnt += 1

if cnt > 1000000 :

break

#抽取一個隨機數(0到1 之間),我們根據其所在區間來確定下一個狀態

rand_num = random()

#計算下一個狀態

next_status = 0

#用來累加概率

num_accu = 0.0

for status_to_be in range(0 , 4) :

num_accu += trans_matrix[status_to_be][now]

#如果累加概率大于上面的隨機數

if rand_num <= num_accu :

#選定為下一個狀態

next_status = status_to_be

break

#狀態轉移

now = next_status

#此狀態計算加一

cnt_list[now] += 1

#狀態轉移的計數結果應該與上面的概率是接近的,這就是馬爾可夫鏈的含義

#狀態分布概率只與轉移矩陣有關,與初始狀態無關

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/189575.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息