Python实现简单的马尔科夫链

之前为了应对数学建模 ,就学了一些数学模型,就比如马尔科夫链。

以下就是我写的简单的马尔科夫链:

python 复制代码
from typing import Any ,NoReturn
from pprint import pprint


class MarkovChain(object):

    CACHE: dict[str : int] = {}

    #实现简单的缓存
    @classmethod
    def cache(cls ,target: Any) -> int|None:
        return cls.CACHE[target] if target in list(cls.CACHE) else None
        

    def __init__(self ,string: str) -> NoReturn:
        if not isinstance(string ,str) or not string:
            return

        self.__main_string: str = string

        
    #返回组合
    @property
    def permutations(self) -> iter:
        data_set: set = set(self.__main_string)
        return {(e1 ,e2) for e1 in data_set for e2 in data_set}


    #计算子字符串的个数
    def count_substring(self ,sub_string: str ,count:int = 0b0) -> int:
        if sub_string not in self.__main_string:
            return 0b0

        for index ,each in enumerate(range(len(self.__main_string)) ,start=0):
            if self.__main_string[index:index+0b10] == sub_string:
                count += 0b1
        else:
            return count


    #返回计算结果
    @property
    def data(self ,*args: tuple ,**kwargs: dict) -> dict:
        data: dict[str : int] = {}
        for index ,each in enumerate(self.permutations ,start=0):
            sub_name: str = ''.join(each)
            data[sub_name]: dict[str : int] = self.count_substring(sub_name)
        else:
            return data


    #计算分母
    def denominator(self ,substring: str) -> int:
        if (SUM := MarkovChain.cache(substring[0])) is not None:
            return SUM
        SUM: int = sum([item for index ,(key ,item) in enumerate(self.data.items()) if substring[0]==key[0]])
        MarkovChain.CACHE[substring[0]]: dict[str:int] = SUM
        return SUM


    #返回计算的比例
    @property
    def percentage(self) -> dict:
        return {key:each/self.denominator(key) for index ,(key ,each) in enumerate(self.data.items() ,start=0)}


def main(*args: tuple ,**kwargs: dict) -> NoReturn:
    for index ,each in enumerate(args ,start=1):
        print(f"{index}:")
        chain: MarkovChain = MarkovChain(string_data)
        pprint(chain.data)
        print()
        pprint(chain.percentage)
    else:
        print("OK!")
相关推荐
傻啦嘿哟39 分钟前
如何使用 Python 开发一个简单的文本数据转换为 Excel 工具
开发语言·python·excel
B站计算机毕业设计超人1 小时前
计算机毕业设计SparkStreaming+Kafka旅游推荐系统 旅游景点客流量预测 旅游可视化 旅游大数据 Hive数据仓库 机器学习 深度学习
大数据·数据仓库·hadoop·python·kafka·课程设计·数据可视化
IT古董1 小时前
【人工智能】Python在机器学习与人工智能中的应用
开发语言·人工智能·python·机器学习
湫ccc2 小时前
《Python基础》之pip换国内镜像源
开发语言·python·pip
hakesashou2 小时前
Python中常用的函数介绍
java·网络·python
菜鸟的人工智能之路2 小时前
极坐标气泡图:医学数据分析的可视化新视角
python·数据分析·健康医疗
菜鸟学Python2 小时前
Python 数据分析核心库大全!
开发语言·python·数据挖掘·数据分析
小白不太白9502 小时前
设计模式之 责任链模式
python·设计模式·责任链模式
喜欢猪猪2 小时前
Django:从入门到精通
后端·python·django
糖豆豆今天也要努力鸭2 小时前
torch.__version__的torch版本和conda list的torch版本不一致
linux·pytorch·python·深度学习·conda·torch