用numpy构建转移矩阵
我需要构建一个随机转移矩阵。给定一个 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)