Определение размерности оператора в qutip

Aug 16 2020

Мой главный вопрос: может кто-нибудь объяснить мне, как список массивов используется для определения измерения в qutip?

Контекст:

Если у меня есть оператор плотности A = Qobj(np.arange(1,65).reshape(8,8))для 3 кубитов, как мне выполнить частичное транспонирование, чтобы я хотел создать двудольную запутанность между кубитом 1 и кубитом 2 и 3?

Я предполагаю, что мне придется определить свою маску как X.dims = [[2,4],[2,4]]и взять, qt.partial_transpose(X, [1,0])что частично транспонирует по второй подсистеме. Но что это X.dims = [[2,4],[2,4]]значит в qutip?

Если это верно, то как мне определить размер сцепления между кубитом 1 и 3 и кубитом 2?

Ответы

2 glS Aug 18 2020 at 15:29

Из официальной документации :

Q.dims: Список, отслеживающий формы для отдельных компонентов многочастной системы (для тензорных произведений и частичных трассировок).

Другими словами, вы можете думать об этом как о размерах (матричного представления) рассматриваемого объекта, принимая во внимание тензорную структуру нижележащего пространства. Первый элемент сообщает вам количество строк, а второй элемент сообщает вам количество столбцов.

Рассмотрим в качестве примера

fooQ = qutip.tensor(qutip.basis(2, 0), qutip.basis(2, 1))

Это тензорное произведение двух кет-состояний кубита, следовательно, это вектор в пространстве размерности $2\times 2$. В виде матрицы вы можете представить ее как$4\times 1$матрица. Но если вы хотите запомнить тензорную структуру этого пространства, которая упрощает такие вещи, как частичная трассировка, лучше сохранить каждое отдельное измерение. Тогда вы получите fooQ.dims == [[2, 2], [1, 1]], потому что есть$2\times 2$ ряды и $1=1\times 1$ столбец.

В вашем примере [[2, 4], [2, 4]]представляет матрицу плотности в пространстве$\mathcal H_1\otimes\mathcal H_2$ с участием $\dim\mathcal H_1=2$ а также $\dim\mathcal H_2=4$.

Вы можете получить общие размеры пространства, выполнив, например,

number_of_rows = np.prod(fooQ.dims[0])
number_of_cols = np.prod(fooQ.dims[1])

Или вы можете "распутать" размеры, получив список измерений каждого отдельного компонентного пространства, с

unravelled_dimensions = np.transpose(fooQ.dims)