#python #arrays #matrix #reshape #diagonal
#python #массивы #матрица #изменить форму #диагональная
Вопрос:
Как я могу создать матрицу H из двух меньших матриц H_0 и H_1, как показано на прилагаемом изображении? Конечное измерение конечно.
Ответ №1:
Вот пример.
a = np.array([[1,2,3],[4,5,6]])
b = np.ones(shape=(3,3))
a_r = a.reshape((-1,))
b_r = b.reshape((-1,))
b_r_ = np.diag(b_r,k=1)
b_r_ = b_r_ b_r_.transpose()
for i in range(b_r_.shape[0]):
if i < len(a_r):
b_r_[i][i]=a_r[i]
else:
b_r_[i][i]=0
Вывод:
array([[1., 1., 0., 0., 0., 0., 0., 0., 0., 0.],
[1., 2., 1., 0., 0., 0., 0., 0., 0., 0.],
[0., 1., 3., 1., 0., 0., 0., 0., 0., 0.],
[0., 0., 1., 4., 1., 0., 0., 0., 0., 0.],
[0., 0., 0., 1., 5., 1., 0., 0., 0., 0.],
[0., 0., 0., 0., 1., 6., 1., 0., 0., 0.],
[0., 0., 0., 0., 0., 1., 0., 1., 0., 0.],
[0., 0., 0., 0., 0., 0., 1., 0., 1., 0.],
[0., 0., 0., 0., 0., 0., 0., 1., 0., 1.],
[0., 0., 0., 0., 0., 0., 0., 0., 1., 0.]])
Беспокойство:
Я думаю, что это не самый эффективный с точки зрения вычислений способ, но я думаю, что он работает
Комментарии:
1. Это не то, что я имел в виду. H_0 и H_1 являются матрицами. Скажем, H_0 — это матрица m x m. Первый блок m x m блока H должен быть равен H_0 . Если H_1 также равно m x m; второй горизонтальный блок H должен содержать H_1 (от строк m 1 до 2m, столбцов от 1 до m).
2. Это звучит как наложение двух матриц друг на друга. Я правильно понял?
Ответ №2:
H = np.kron(np.eye(r,dtype=int),H_0) np.kron(np.diag(np.ones(r-1), 1),H_1) np.kron(np.diag(np.ones(r-1), -1),transpose(conj(H_1))) #r = repetition