Définition de la dimension d'un opérateur dans qutip
Ma question principale : quelqu'un peut-il m'expliquer comment la liste des tableaux est utilisée pour définir la dimension dans qutip ?
Le contexte:
Si j'ai mon opérateur A = Qobj(np.arange(1,65).reshape(8,8))
de densité de 3 qubits, comment prendre la transposition partielle de telle sorte que je veuille faire un enchevêtrement bipartite entre le qubit 1 avec le qubit 2 et 3?
Je suppose que je devrais définir mon masque comme X.dims = [[2,4],[2,4]]
et prendre qt.partial_transpose(X, [1,0])
lequel en prenant une transposition partielle sur le deuxième sous-système. Mais qu'est-ce que cela X.dims = [[2,4],[2,4]]
signifie dans qutip?
Si cela est correct, comment définirais-je ma dimension d'intrication entre les qubit 1 et 3 et le qubit 2 ?
Réponses
De la documentation officielle :
Q.dims
: Liste gardant une trace des formes pour les composants individuels d'un système multipartite (pour les produits tensoriels et les traces partielles).
En d'autres termes, vous pouvez le considérer comme les dimensions de la (représentation matricielle de) l'objet considéré, en tenant compte de la structure tensorielle de l'espace sous-jacent. Le premier élément vous indique le nombre de lignes tandis que le deuxième élément vous indique le nombre de colonnes.
Prenons comme exemple
fooQ = qutip.tensor(qutip.basis(2, 0), qutip.basis(2, 1))
C'est le produit tensoriel de deux états de qubit ket, c'est donc un vecteur dans un espace de dimension$2\times 2$. En tant que matrice, vous pouvez la représenter comme un$4\times 1$matrice. Mais si vous voulez vous souvenir de la structure tensorielle de cet espace, ce qui facilite les choses comme le traçage partiel, il est préférable de stocker chaque dimension individuelle. Vous vous retrouvez alors avec fooQ.dims == [[2, 2], [1, 1]]
, parce qu'il y a$2\times 2$rangées, et$1=1\times 1$colonne.
Dans votre exemple, [[2, 4], [2, 4]]
représente une matrice de densité dans un espace$\mathcal H_1\otimes\mathcal H_2$avec$\dim\mathcal H_1=2$et$\dim\mathcal H_2=4$.
Vous pouvez récupérer les dimensions globales de l'espace en faisant par exemple
number_of_rows = np.prod(fooQ.dims[0])
number_of_cols = np.prod(fooQ.dims[1])
Ou vous pouvez "démêler" les dimensions, en obtenant une liste des dimensions de chaque espace composant individuel, avec
unravelled_dimensions = np.transpose(fooQ.dims)