Я использую Julia версии 1.1.Я много работаю с матрицами, которые могут быть построены из меньших матриц, например, матрицы Паули.Мне не ясно, как эффективно построить большие матрицы с помощью набора меньших матриц в Юлии, то есть напрямую записать меньшую матрицу в определенную позицию индекса.
Юлия kron
не является удовлетворительным, так как япотребуется получить несколько «больших матриц», чтобы получить мой конечный результат.Например, я хотел бы создать что-то вроде этого (это только очень маленький пример)
sy = [[0 -im]; [im 0]]
M = [[0 sy adjoint(sy)];
[adjoint(sy) 0 sy];
[sy adjoint(sy) 0]]
Это можно было бы сделать, выполнив два продукта kronecker, добавив два результата.Однако это было бы огромной тратой, особенно если матрицы стали больше.
Я также уже пытался работать с пакетом BlockArrays.jl
, но понял, что он не полностью удовлетворяет мои потребности.
ВВ конце я хочу иметь возможность обратиться к «матричным блокам» моей большой матрицы, чтобы я мог напрямую назначить строительные матрицы правильной позиции, для приведенного выше примера это будет выглядеть следующим образом (я не использовал цикл здесь дляпроясните мою точку зрения):
M[1, 2] = sy
M[1, 3] = adjoint(sy)
M[2, 1] = adjoint(sy)
M[2, 3] = sy
M[3, 1] = sy
M[3, 2] = adjoint(sy)
Я понимаю, что это означает, что мои исходные индексы большого массива сводятся к чему-то вроде массива "блочные индексы".
Я думал об этом с помощью представлений, гдеЯ создаю матрицу SubArrays
, которую затем могу адресовать с помощью индексной нотации матричного блока, например
S0 = view(M, 1:2, 1:2)
S1 = view(M, 1:2, 2:4)
S2 = view(M, 1:2, 4:6)
...
Viewmatrix = [[S0 S1 S2]; [S3 S4 S5]; [S6 S7 S8]]
Viewmatrix[1, 2] .= sy
Viewmatrix[1, 3] .= adjoint(sy)
...
. Теперь мне неясно, как на самом деле поступить так и написать такую матрицу представления в целом.или если это даже реальный способ решения проблемы.Если есть лучший способ решения этой проблемы, я хотел бы знать это.