numpy填充矩阵对角线值与另一个矩阵

这是用另一个完整矩阵填充矩阵对角元素的更简单方法吗?


b = [1,2,3,4,5,6,7,8,9]

a = np.zeros((9, 9), int)

np.fill_diagonal(a, b)

我希望结果是


[[1. 0  0  ...........0 0]

 [0. 2. 0  ...........0 0]

 [0. 0. 3. ...  0  0  0 0]

 [0. 0. 0. 4 0  0  0  0 0]

 [0. 0. 0. 0 5  0  0  0 0]

 [0. 0. 0. ...  6  0  0 0]

 [0. 0. 0. ...  0  7  0 0]

 [0. 0. 0. ...  0  0  8 0]

 [0. 0. 0. ...  0  0  0 9]]


GCT1015
浏览 210回答 3
3回答

慕虎7371278

你的方法确实有效:import numpy as npb = [1,2,3,4,5,6,7,8,9]a = np.zeros((9, 9), int)np.fill_diagonal(a, b)替代:a[np.diag_indices_from(a)] = b

胡说叔叔

这是其中一件事numpy.diag:a = numpy.diag(b)

蝴蝶不菲

只是为了好玩,np.eye有广播。np.eye(a.shape[0], dtype=int) * barray([[1, 0, 0, 0, 0, 0, 0, 0, 0],       [0, 2, 0, 0, 0, 0, 0, 0, 0],       [0, 0, 3, 0, 0, 0, 0, 0, 0],       [0, 0, 0, 4, 0, 0, 0, 0, 0],       [0, 0, 0, 0, 5, 0, 0, 0, 0],       [0, 0, 0, 0, 0, 6, 0, 0, 0],       [0, 0, 0, 0, 0, 0, 7, 0, 0],       [0, 0, 0, 0, 0, 0, 0, 8, 0],       [0, 0, 0, 0, 0, 0, 0, 0, 9]])您也可以使用diagflat, 如果b的尺寸 > 1Dnp.diagflat(b)# np.diagflat([b])# np.diagflat(np.array([b]))array([[1, 0, 0, 0, 0, 0, 0, 0, 0],       [0, 2, 0, 0, 0, 0, 0, 0, 0],       [0, 0, 3, 0, 0, 0, 0, 0, 0],       [0, 0, 0, 4, 0, 0, 0, 0, 0],       [0, 0, 0, 0, 5, 0, 0, 0, 0],       [0, 0, 0, 0, 0, 6, 0, 0, 0],       [0, 0, 0, 0, 0, 0, 7, 0, 0],       [0, 0, 0, 0, 0, 0, 0, 8, 0],       [0, 0, 0, 0, 0, 0, 0, 0, 9]])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python