计算吸收马尔可夫链的基本矩阵的最佳方法?

2024-01-08

我有一个非常大的吸收马尔可夫链(根据问题大小进行缩放——从 10 个状态到数百万个),它非常稀疏(大多数状态只能对 4 或 5 个其他状态做出反应)。

我需要计算该链的基本矩阵的一行(给定一个起始状态的每个状态的平均频率)。

通常,我会通过计算来做到这一点(I - Q)^(-1),但是我一直没能找到一个好的库来实现稀疏矩阵逆算法!我看过几篇关于它的论文,其中大部分是博士论文。水平的工作。

我的大部分谷歌结果都指向我一些帖子,讨论在求解线性(或非线性)方程组时不应该使用矩阵逆......我觉得这不是特别有帮助。基本矩阵的计算是否类似于求解方程组,而我根本不知道如何用另一个形式来表达一个?

因此,我提出两个具体问题:

计算稀疏矩阵的逆矩阵的一行(或所有行)的最佳方法是什么?

OR

计算大型吸收马尔可夫链的基本矩阵的一行的最佳方法是什么?

Python 解决方案会很棒(因为我的项目目前仍处于概念验证阶段),但如果我必须亲自动手使用一些好的 Fortran 或 C,那不是问题。

编辑:我刚刚意识到矩阵 A 的逆 B 可以定义为 AB=I,其中 I 是单位矩阵。这可能允许我使用一些标准的稀疏矩阵求解器来计算逆矩阵......我必须逃跑,所以请随意完成我的思路,我开始认为这可能只需要一个真正的基本矩阵财产...


假设你想做的是锻炼吸收前的预期步数 http://en.wikipedia.org/wiki/Absorbing_Markov_chain#Expected_number_of_steps,维基百科上转载的“有限马尔可夫链”(Kemeny 和 Snell)的方程为:

或者扩展基本矩阵

重新排列:

这是使用函数求解线性方程组的标准格式

将其付诸实践以证明性能差异(即使对于比您所描述的系统小得多的系统)。

import networkx as nx
import numpy

def example(n):
    """Generate a very simple transition matrix from a directed graph
    """
    g = nx.DiGraph()
    for i in xrange(n-1):
        g.add_edge(i+1, i)
        g.add_edge(i, i+1)
    g.add_edge(n-1, n)
    g.add_edge(n, n)
    m = nx.to_numpy_matrix(g)
    # normalize rows to ensure m is a valid right stochastic matrix
    m = m / numpy.sum(m, axis=1)
    return m

提出计算预期步数的两种替代方法。

def expected_steps_fundamental(Q):
    I = numpy.identity(Q.shape[0])
    N = numpy.linalg.inv(I - Q)
    o = numpy.ones(Q.shape[0])
    numpy.dot(N,o)

def expected_steps_fast(Q):
    I = numpy.identity(Q.shape[0])
    o = numpy.ones(Q.shape[0])
    numpy.linalg.solve(I-Q, o)

选择一个足够大的示例来演示计算基本矩阵时出现的问题类型:

P = example(2000)
# drop the absorbing state
Q = P[:-1,:-1]

产生以下时序:

%timeit expected_steps_fundamental(Q)
1 loops, best of 3: 7.27 s per loop

And:

%timeit expected_steps_fast(Q)
10 loops, best of 3: 83.6 ms per loop

需要进一步的实验来测试稀疏矩阵的性能影响,但很明显,计算逆矩阵比您预期的要慢得多。

与此处介绍的方法类似的方法也可用于步骤数的方差

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算吸收马尔可夫链的基本矩阵的最佳方法? 的相关文章

  • 颜色逻辑算法

    我们正在构建一个体育应用程序 并希望将团队颜色融入到应用程序的各个部分 现在 每个团队都可以使用几种不同的颜色来表示 我想做的是执行检查以验证两个团队颜色是否在彼此一定的范围内 这样我就不会显示两个相似的颜色 因此 如果团队 1 的主要团队
  • 在 python 程序中合并第三方库的最佳实践是什么?

    下午好 我正在为我的工作编写一个中小型Python程序 该任务需要我使用 Excel 库xlwt and xlrd 以及一个用于查询 Oracle 数据库的库 称为CX Oracle 我正在通过版本控制系统 即CVS 开发该项目 我想知道围
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • python 相当于 R 中的 get() (= 使用字符串检索符号的值)

    在 R 中 get s 函数检索名称存储在字符变量 向量 中的符号的值s e g X lt 10 r lt XVI s lt substr r 1 1 X get s 10 取罗马数字的第一个符号r并将其转换为其等效整数 尽管花了一些时间翻
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • 如何在Python中获取葡萄牙语字符?

    我正在研究葡萄牙语 角色看起来很奇怪 我怎样才能解决这个问题 代码 import feedparser import random Vou definir os feeds feeds conf feedurl http pplware s
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • IO 密集型任务中的 Python 多线程

    建议仅在 IO 密集型任务中使用 Python 多线程 因为 Python 有一个全局解释器锁 GIL 只允许一个线程持有 Python 解释器的控制权 然而 多线程对于 IO 密集型操作有意义吗 https stackoverflow c
  • 用于评估数组单调性的算法(即判断数组的“排序性”)

    EDIT 哇 很多很棒的回复 是的 我使用它作为适应度函数来判断遗传算法执行的排序的质量 因此 评估成本很重要 即 它必须是快速的 最好是O n 作为我正在使用的人工智能应用程序的一部分 我希望能够根据候选整数数组的单调性 也称为 排序性
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我

随机推荐

  • Apache Spark join 操作的扩展能力较差

    我在 Apache Spark 上运行 join 操作 发现没有弱可扩展性 如果有人能解释这一点 我将不胜感激 我创建两个数据帧 a b 和 a c 并通过第一列连接数据帧 我为 一对一 连接生成数据帧值 另外 我使用相同的分区器来避免随机
  • 文本字段在 iOS 模拟器上不显示键盘

    我试图使用基本文本字段在这里构建一个简单的登录屏幕 但我无法让键盘出现在模拟器中 通过物理键盘输入效果很好 但在 iOS 模拟器中没有可见的键盘 我必须明确打开它还是什么 感觉我在这里错过了一些非常基本的东西 buildLoginScree
  • 封闭件损坏 - 请帮我修复它

    in a 相关问题 https stackoverflow com questions 4584397 javascript countdown clock 4584501我已经发布了这段代码 它几乎可以工作 但计数器却不能 我们可以修复它
  • 如何在 OpenVDB 中对网格进行下采样

    OpenVDB中有什么好的方法可以对体素网格进行下采样吗 例如 我有体素大小为 1 0 的网格 8x8x8 我想要获得体素大小为 2 0 的网格 4x4x4 each voxel of new grid is some interpolat
  • CoreAudio - 如何确定播放aac文件的结尾

    我正在 iPhone 上使用 CoreAudio 但我无法找到如何知道歌曲何时播放完毕 我放了一个属性监听器kAudioQueueProperty IsRunning 它在开始播放时有效 但在文件结尾时无效 当我停止 AudioQueue
  • 如何显示api函数的输出?

    抱歉问基本问题 我正在尝试在 QPlainTextWidget 中显示 json 我有 api 函数 它有控制台输出并包含所有需要的数据 看起来像这样 int iperf run server struct iperf test test
  • npm 错误! 403 403 禁止 npm 发布

    我尝试在 npm 上发布公共包 但出现此错误 npm ERR code E403 npm ERR 403 403 Forbidden PUT https registry npmjs org clem b 2fweather Forbidd
  • OSX (XNU) 系统调用的实际记录在哪里?

    我正在浏览系统调用 master https opensource apple com source xnu xnu 4570 71 2 bsd kern syscalls master文件在这里 但根本没有记录 系统调用的文档是否存在 如
  • 谁能解释为什么这种排序不起作用?

    例如 如果我有一个这样的列表 List1 7 6 9 List1 List1 sort list sort 对列表进行就地排序并返回None 所以你实际上将该返回值分配给List1 i e None gt gt gt List1 7 6 9
  • Android Viewpager Tinder 类似 UI,具有 3D 卡堆栈外观

    我正在尝试使用 ViewPager 在 android 中创建一个类似火种的用户界面 我看过这个图书馆 https github com kikoso Swipeable Cards 但我希望在向右滑动后能够看到上一张卡片 因此首选 Vie
  • 如何在 IE 的 google chrome 框架插件中启用文件协议

    我想在带有 chrome 框架的 IE 中打开一个 Html5 页面 但只支持 http 协议 我无法从磁盘打开 html 文件 在注册表路径中HKCU 软件 Google ChromeFrame添加这个键 允许不安全URL 1 DWORD
  • 使用 jQuery 和 AJAX 加载部分页面

    我在页面 A 和 div 上有一个动态链接列表 我希望在其中加载基于 PHP 变量的另一个动态生成的页面 B 的内容 a href loader php id 1 Link 1 a a href loader php id 2 Link 2
  • 如何将 Amazon Redshift 连接到 python

    这是我的 python 代码 我想将我的 Amazon Redshift 数据库连接到 Python 但它在主机中显示错误 谁能告诉我正确的语法 我是否正确传递了所有参数 con psycopg2 connect dbname pg tab
  • 如何获取 CSV 文本文件中特定字段的最大值?

    我的每一行文本文件示例 CSV 逗号分隔 如下 2016 01 10 23 56 07 10 71 47 可以看出 字段 3 4 和 5 是numeric价值观 对于每一行 我只想得到maximum字段值3 and 4 就像是 awk F
  • 如何从命名空间实现函数?

    本质上 这是我的源代码 namespace name int func void int main void name int func void body return 0 现在 我想在不同的地方编写该函数 声明为 int 命名空间 您不
  • 从 multiprocessing.Process 继承的 Python 类的设置值问题

    为什么这段代码 import multiprocessing import time class Bot multiprocessing Process def init self self val 0 multiprocessing Pr
  • 寻找 Expression Blend 设计师 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 对于寻找 Expression Blend WPF 设计师来执行合同工作有哪些建议 我认为 本地 自由设计师的价格可能是最合理的 但我什至
  • Huggingface 的“resume_from_checkpoint”有效吗?

    我目前将我的教练设置为 training args TrainingArguments output dir f results model checkpoint evaluation strategy epoch learning rat
  • 这是在 Mul 中使用 cbw 的正确方法吗?

    我从 8 位和 8 位寄存器得到乘法 但是 当你有一个 16 位和一个 8 位时 我们如何在乘法之前进行转换 问题 需要提供260 19的代码片段 并打印结果 我做了 mov Ax 260 mov Al 19 cbw Mul Ax PutI
  • 计算吸收马尔可夫链的基本矩阵的最佳方法?

    我有一个非常大的吸收马尔可夫链 根据问题大小进行缩放 从 10 个状态到数百万个 它非常稀疏 大多数状态只能对 4 或 5 个其他状态做出反应 我需要计算该链的基本矩阵的一行 给定一个起始状态的每个状态的平均频率 通常 我会通过计算来做到这