繁体   English   中英

在python中初始化对角矩阵

[英]Initialise a diagonal matrix in python

我想在python中创建一个全零的矩阵,除了从列表中选择的某个值。 例如(非常愚蠢)

l=[0,1,2,3]

我想在位置l[0] l[1]等位置创建一个字母“ x”的矩阵(列表的列表),如下所示:

  [x, 0, 0, 0]    
  [0, x, 0, 0]    
  [0, 0, x, 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]]

如果我对您的理解正确,则希望基于列表放置非零值。 因此,也许是这样的:

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']]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM