我需要构建一个随机转移矩阵。给定N_by_N矩阵M,M [i,j]是i和j之间的概率。问题是我需要构造M,我需要构建的M是以下内容:
矩阵R,与M相同,除了如果i和j之间的概率> 1,则R [i,j] = 1。 0.(R非常稀疏)
函数Pr(i,j)给出i和j之间的概率。
所以我有R和Pr,我需要构建M.我能想到这样做的唯一方法是使用昂贵的python循环,我想知道是否有一种快速的方法可以用numpy做到这一点。
答案 0 :(得分:0)
如果我理解你的问题,M
将与R
一样稀疏,(因为R [i,j] == 1 iff Pr(i,j)> 0)。然后,您只需为Pr(i,j,)
的非零元素运行R
,您可以使用numpy where
函数获取该元素:
I,J=where(R)
现在你的循环大大减少了(假设R确实很稀疏):
M=zeros(R.shape)
for i,j in zip(I,J):
M[i,j]=Pr(i,j)