如何用python创建一个输入值为对角线的n到n矩阵



我正在进行概率计算,我可以为一个小矩阵运行我的代码,如;

P_4 = np.array([

[0  ,1  ,0  ,  0,  0],
[0  ,1/4,3/4,  0,  0],
[0  ,0  ,2/4,2/4,  0],
[0  ,0  ,0  ,3/4,1/4],
[0  ,0  ,0  ,  0,1  ],

])

然而,我想创建一个N*N矩阵,并以对角线0/N和下一个值1 - 0/N填充值。

n = 5
a = np.zeros((n,n),dtype = int)
np.fill_diagonal(a,np.array([range(1/n)]))
a
写上面的代码会产生错误

TypeError: 'float' object cannot be interpreted as an integer

我将非常感谢任何建议。

这里有一个使用linspacediag的选项。

n = 5
diag = np.linspace(0, 1, n)
diag1 = (1 - diag[:-1])
a = np.diag(diag) + np.diag(diag1, 1)
a

输出:

array([[0.  , 1.  , 0.  , 0.  , 0.  ],
[0.  , 0.25, 0.75, 0.  , 0.  ],
[0.  , 0.  , 0.5 , 0.5 , 0.  ],
[0.  , 0.  , 0.  , 0.75, 0.25],
[0.  , 0.  , 0.  , 0.  , 1.  ]])

最新更新