在python中初始化对角矩阵

在python中初始化对角矩阵,python,list,diagonal,Python,List,Diagonal,我想在python中创建一个矩阵,除了从列表中选择的一些值之外,它的值都是零。比如说,我很笨 l=[0,1,2,3] 我想创建一个矩阵,一个列表列表,其中字母x位于位置l[0]l[1]等等。。像这样: [x, 0, 0, 0] [0, x, 0, 0] [0, 0, x, 0] [0, 0, 0, x] val = 'x' l = [2,1,0,3] matrix = [[val if i == e else 0 for i in range(len(l))]

我想在python中创建一个矩阵,除了从列表中选择的一些值之外,它的值都是零。比如说,我很笨

l=[0,1,2,3]
我想创建一个矩阵,一个列表列表,其中字母x位于位置l[0]l[1]等等。。像这样:

  [x, 0, 0, 0]    
  [0, x, 0, 0]    
  [0, 0, x, 0]
  [0, 0, 0, x]
val = 'x'
l = [2,1,0,3]
matrix = [[val if i == e else 0 for i in range(len(l))] for e in l]
print(matrix)
[[0, 0, 'x', 0], [0, 'x', 0, 0], ['x', 0, 0, 0], [0, 0, 0, 'x']]
我想让它具有交互性,可变长度不总是4,可能会在输入时给出

您应该使用numpy的diag函数

import numpy as np
np.diag(l)

array([[0, 0, 0, 0],
       [0, 1, 0, 0],
       [0, 0, 2, 0],
       [0, 0, 0, 3]])
使用纯python,初始化一个空的2D列表,然后填充对角线

diag = [[0] * len(l) for _ in range(len(l))]
for i, e in enumerate(l):
    diag[i][i] = e

diag
# [[0, 0, 0, 0], [0, 1, 0, 0], [0, 0, 2, 0], [0, 0, 0, 3]]

如果我理解正确,您希望根据列表放置非零值。所以,也许是这样的:

  [x, 0, 0, 0]    
  [0, x, 0, 0]    
  [0, 0, x, 0]
  [0, 0, 0, x]
val = 'x'
l = [2,1,0,3]
matrix = [[val if i == e else 0 for i in range(len(l))] for e in l]
print(matrix)
[[0, 0, 'x', 0], [0, 'x', 0, 0], ['x', 0, 0, 0], [0, 0, 0, 'x']]
输出如下:

  [x, 0, 0, 0]    
  [0, x, 0, 0]    
  [0, 0, x, 0]
  [0, 0, 0, x]
val = 'x'
l = [2,1,0,3]
matrix = [[val if i == e else 0 for i in range(len(l))] for e in l]
print(matrix)
[[0, 0, 'x', 0], [0, 'x', 0, 0], ['x', 0, 0, 0], [0, 0, 0, 'x']]

您的l应该是一个索引对列表,包括行和列值。问题中显示的l非常简单。泛化需要l是一个行、列值的列表,看看numpyperfect……你是最好的