# -*- 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
#狀態轉移的計數結果應該與上面的概率是接近的,這就是馬爾可夫鏈的含義
#狀態分布概率只與轉移矩陣有關,與初始狀態無關
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态