gpt4 book ai didi

python - 如何生成特定形式的 NxN 矩阵

转载 作者:太空宇宙 更新时间:2023-11-04 09:25:22 27 4
gpt4 key购买 nike

我正在使用马尔可夫链解决问题,为此我需要生成一个 NxN 转换矩阵。

矩阵的第一行、第一列和左下对角线应包含零,并且随着行的增加而增加大小的分数。对于 NxN 矩阵,第一行中的分数是 1/n,下一行是 1/n-1 等等,直到分数为 1 的第 n-1 行。我在下面包含了 10x10 和 5x5 的示例.

p10 = ([0, 1/10, 1/10, 1/10, 1/10, 1/10, 1/10, 1/10, 1/10, 1/10, 1/10],
[0, 0, 1/9, 1/9, 1/9, 1/9, 1/9, 1/9, 1/9, 1/9, 1/9],
[0, 0, 0, 1/8, 1/8, 1/8, 1/8, 1/8, 1/8, 1/8, 1/8],
[0, 0, 0, 0, 1/7, 1/7, 1/7, 1/7, 1/7, 1/7, 1/7],
[0, 0, 0, 0, 0, 1/6, 1/6, 1/6, 1/6, 1/6, 1/6],
[0, 0, 0, 0, 0, 0, 1/5, 1/5, 1/5, 1/5, 1/5],
[0, 0, 0, 0, 0, 0, 0, 1/4, 1/4, 1/4, 1/4],
[0, 0, 0, 0, 0, 0, 0, 0, 1/3, 1/3, 1/3],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1/2, 1/2],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],)


p5 = ([0,1/5,1/5,1/5,1/5,1/5],
[0,0,1/4,1/4,1/4,1/4],
[0,0,0,1/3,1/3,1/3],
[0,0,0,0,1/2,1/2],
[0,0,0,0,0,1],
[0,0,0,0,0,0],)

我刚开始在 Python 中使用矩阵,所以我想知道为用户指定的给定维度生成这些矩阵的最简单/最有效的方法是什么(编辑:我已经导入了 numpy 模块,所以任何利用它的解决方案将不胜感激。

最佳答案

对于矩阵,我建议使用 numpy。为了得到你想要的,你可以使用:

import numpy as np

def transition_matrix(n):
arr = np.zeros((n+1, n+1))
division = 1. / np.linspace(1, n, n)[::-1] # this changes it from 1 / [1,2,3, ... , n-1, n] to 1 / [n, n-1, n-2, ..., 2 ,1] which is the order we want to add the division values

for i in range(n):
arr[i, i+1:] = division[i] # fill the array with the division values at row i starting at column i + 1 until the end
return arr

产生:

[[0.         0.25       0.25       0.25       0.25      ]
[0. 0. 0.33333333 0.33333333 0.33333333]
[0. 0. 0. 0.5 0.5 ]
[0. 0. 0. 0. 1. ]
[0. 0. 0. 0. 0. ]]

对于 n = 4

然而,对于非常大的矩阵,这会变慢,但如果你保持在 1000x1000 以下,你应该没问题。

我在没有循环的情况下尝试了答案,对于小于 +/- 80x80 的矩阵,这个答案更快,之后循环实际上更快,因为我相信它每行只计算一个除法。所以使用适合您问题的那个

关于python - 如何生成特定形式的 NxN 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57922714/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com