Матричное Умножение На Основе Продукта Кронекера

#python #pytorch

Вопрос:

Я работаю над тем, чтобы попытаться получить собственные векторы матрицы продуктов Кронекера, крон(A, B), используя собственные векторы каждого из факторов Кронекера, A и B. Я считаю, что каждый собственный вектор матрицы продуктов Кронекера является произведением Кронекера между собственным вектором A и собственным вектором B.

Я уже получил собственные векторы факторов, но у меня возникли проблемы с поиском эффективного способа получения собственных векторов крона(A, B), который не включает в себя перебор двух матриц факторов.

Вот что у меня есть (a, b-факторы Кронекера).

 evals_a, evecs_a = torch.linalg.eigh(a)
evals_b, evecs_b = torch.linalg.eigh(b)
 

Вот что я хотел бы эффективно реализовать:

 evecs_kron_ab = []
for evec_a in evecs_a:
   for evec_b in evecs_b:
       evec_kron_ab = torch.kron(evec_a, evec_b)
       evecs_kron_ab.append(evec_kron_ab)
 

В идеале список собственных векторов также является тензором, в котором каждая строка является собственным вектором