用numpy构建转移矩阵

0 投票
1 回答
2098 浏览
提问于 2025-04-18 06:36

我需要构建一个随机转移矩阵。给定一个 N 行 N 列的矩阵 M,M[i,j] 表示从 i 到 j 的概率。现在的问题是,我需要构建这个矩阵 M,而我手头有以下信息:

  • 矩阵 R,和 M 一样,不过 R[i,j] = 1 当且仅当 i 到 j 的概率大于 0。(R 的大部分元素都是 0,比较稀疏)

  • 一个函数 Pr(i,j),它可以给出 i 到 j 的概率。

所以我现在有了 R 和 Pr,但我需要构建 M。我想到的唯一方法就是用比较耗时的 Python 循环来实现,我在想有没有更快的方法可以用 numpy 来完成这个任务。

1 个回答

0

如果我理解你的问题,M 的稀疏程度和 R 是一样的(因为当且仅当 Pr(i,j) 大于 0 时,R[i,j] 才等于 1)。所以你只需要对 R 中非零的元素运行 Pr(i,j),你可以使用 numpy 的 where 函数来获取这些非零元素:

I,J=where(R)

这样一来,你的循环次数就大大减少了(假设 R 确实是稀疏的):

M=zeros(R.shape)

for i,j in zip(I,J):
    M[i,j]=Pr(i,j)

撰写回答