Как я могу использовать numpy для создания диагональной матрицы из 1d массива?

Я использую Python с NumPy для создания линейной алгебры.

Я провел numpy SVD на матрице для получения матриц U,i и V. Однако матрица i выражается в виде матрицы 1x4 с 1 строкой. то есть: [ 12.22151125 4.92815942 2.06380839 0.29766152],

Как я могу получить NumPy, чтобы выразить матрицу I в виде диагональной матрицы следующим образом:[[12.22151125, 0, 0, 0],[0,4.92815942, 0, 0],[0,0,2.06380839,0 ],[0,0,0,0.29766152]]

Код, который я использую:

A = np.matrix([[3, 4, 3, 1],[1,3,2,6],[2,4,1,5],[3,3,5,2]])

U, i, V = np.linalg.svd(A,full_matrices=True)

Поэтому я хочу, чтобы я была полной диагональной матрицей. Как я это делаю?

2 ответа

Решение

Используйте функцию Diag Numpy:

numpy.diag(i)

Из документации:

Извлечь диагональ или построить диагональный массив.

Как я могу получить недоумение, чтобы выразить матрицу i как диагональную матрицу, например так: [[12.22151125, 0, 0, 0],[0,4.92815942, 0, 0],[0,0,2.06380839,0 ],[0,0,0,0.29766152]]

Вы должны использовать numpy.diagflat(flatted_input, k=0), чтобы Create a two-dimensional array with the flattened input as a diagonal

пример

In [1]: flatted_input = [12, 4, 2, 1]

In [2]: np.diagflat(flatted_input)

Out [2]: array([[12, 0, 0, 0],
                [0, 4, 0, 0],
                [0, 0, 2, 0],
                [0, 0, 0, 1]])
Другие вопросы по тегам