为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

GCT1015 2021-11-23 19:48:13
这是用另一个完整矩阵填充矩阵对角元素的更简单方法吗?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]]
查看完整描述

3 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

你的方法确实有效:


import numpy as np


b = [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


查看完整回答
反对 回复 2021-11-23
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

这是其中一件事numpy.diag

a = numpy.diag(b)


查看完整回答
反对 回复 2021-11-23
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

只是为了好玩,np.eye有广播。


np.eye(a.shape[0], dtype=int) * 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]])

您也可以使用diagflat, 如果b的尺寸 > 1D


np.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]])


查看完整回答
反对 回复 2021-11-23
  • 3 回答
  • 0 关注
  • 209 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信