Definición de la dimensión de un operador en qutip

Aug 16 2020

Mi pregunta principal: ¿Alguien puede explicarme cómo se usa la lista de matrices para definir la dimensión en qutip?

Contexto:

Si tengo mi operador A = Qobj(np.arange(1,65).reshape(8,8))de densidad de 3 qubits, ¿cómo tomo la transposición parcial de modo que quiero hacer un entrelazamiento bipartito entre el qubit 1 con el qubit 2 y 3?

Supongo que tendría que definir mi máscara como X.dims = [[2,4],[2,4]]y tomar qt.partial_transpose(X, [1,0])la transposición parcial sobre el segundo subsistema. Pero, ¿qué significa esto X.dims = [[2,4],[2,4]]en qutip?

Si esto es correcto, ¿cómo definiría mi dimensión para el entrelazamiento entre qubit 1 y 3 y qubit 2?

Respuestas

2 glS Aug 18 2020 at 15:29

De la documentación oficial :

Q.dims: Seguimiento de listas de formas para componentes individuales de un sistema multipartito (para productos tensoriales y trazas parciales).

En otras palabras, puede considerarlo como las dimensiones de (la representación matricial de) el objeto en consideración, teniendo en cuenta la estructura tensorial del espacio subyacente. El primer elemento le informa sobre el número de filas, mientras que el segundo elemento le informa sobre el número de columnas.

Considere como un ejemplo

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

Este es el producto tensorial de dos estados de ket de qubit, por lo tanto, es un vector en un espacio de dimensión$2\times 2$. Como una matriz, puedes representarla como un$4\times 1$matriz. Pero si quiere recordar la estructura tensorial de este espacio, lo que facilita hacer cosas como el rastreo parcial, es mejor almacenar cada dimensión individual. Entonces terminas con fooQ.dims == [[2, 2], [1, 1]], porque hay$2\times 2$filas, y$1=1\times 1$columna.

En tu ejemplo, [[2, 4], [2, 4]]representa una matriz de densidad en un espacio$\mathcal H_1\otimes\mathcal H_2$con$\dim\mathcal H_1=2$y$\dim\mathcal H_2=4$.

Puede recuperar las dimensiones generales del espacio haciendo, por ejemplo ,

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

O puede "desentrañar" las dimensiones, obteniendo una lista de las dimensiones de cada espacio componente individual, con

unravelled_dimensions = np.transpose(fooQ.dims)