我正在使用马尔可夫链解决问题,为此我需要生成一个 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 模块,所以任何利用它的解决方案将不胜感激。
我是一名优秀的程序员,十分优秀!