如何为马尔科夫路径优化numpy代码

2024-05-16 22:39:57 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是一个python函数来生成Markov路径(旅行商问题)。在

def generate_travel_path(markov_matrix, n):
    assert markov_matrix.shape[0] == markov_matrix.shape[1]
    assert n <= markov_matrix.shape[0]

    p = markov_matrix.copy()
    path = [0] * n
    for k in range(1, n):
        k1 = path[k-1]
        row_sums = 1 / (1 - p[:, k1])
        p *= row_sums[:, np.newaxis]
        p[:, k1] = 0
        path[k] = np.random.multinomial(1, p[k1, :]).argmax()

    assert len(set(path)) == n
    return path

markov_matrix是一个预定义的Markov转移矩阵。代码从节点0开始生成一条路径,并根据该矩阵访问每个节点一次。在

不过我觉得功能比较慢。下面是53x53markov_matrix的逐行配置文件:

^{pr2}$

如果我运行这个函数25000次,它将花费125秒以上。 有没有空间来提高速度?在

下面是一个生成马尔可夫矩阵的简单函数。在

def initial_trans_matrix(n):
    x = np.ones((n, n)) / (n - 1)
    np.fill_diagonal(x, 0.0)
    return x

Tags: path函数路径returndefnp矩阵k1