问题描述
我有一个累积转移矩阵,需要构建一个简单的随机游走算法来尽可能高效地从矩阵中生成 500 个值(实际矩阵为 1000 x 1000)
cum_sum
[array([0.3,0.5,0.7,0.9,1. ]),array([0.5,0.75,1. ]),array([0.66666667,1.,1. ]),array([0.4,0.6,0.8,1. ])]
我尝试过的东西
def random_walk(cum_sum):
start_point=random.choice([item[0] for item in cum_sum])
random=np.random.uniform(0,1,1)
if random > start_point:
解决方法
您可以在每个阶段使用 numpy random choice 来模拟过渡。
您可以将概率作为参数 p
,第一个位置参数定义样本空间。为了将累积概率分布转换为概率分布,我所做的是在开头插入一个零并使用 numpy diff 计算每一步的增加。
准备您的示例概率
P = np.array([
[0.3,0.5,0.7,0.9,1. ],[0.5,0.75,1. ],[0.66666667,1.,1. ],[0.4,0.6,0.8,1. ]])
P = np.diff(np.hstack([np.zeros((len(P),1)),P]),axis=1)
然后运行几步
i = 0;
path = [0]
I = np.arange(len(P))
for _ in range(10):
i = np.random.choice(I,p = P[i])
path.append(i);
print(path)