Инициализировать диагональную матрицу в Python - PullRequest
0 голосов
/ 11 января 2019

Я хотел бы создать в 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), возможно, дает на входе

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Если я вас правильно понял, вы хотите, чтобы ненулевые значения были размещены на основе списка. Итак, может быть что-то вроде этого:

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']]
0 голосов
/ 11 января 2019

Вы должны использовать функцию 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]]
...