在 python 中初始化对角矩阵
Initialise a diagonal matrix in python
我想在 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]
我想让它具有交互性,长度可变(不总是 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,初始化一个空的二维列表并填充之后的对角线。
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']]
我想在 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]
我想让它具有交互性,长度可变(不总是 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,初始化一个空的二维列表并填充之后的对角线。
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']]