DensityMatrix
class qiskit.quantum_info.DensityMatrix(data, dims=None)
Bases : QuantumState, TolerancesMixin
DensityMatrix classe
Initialise un objet matrice de densité.
Paramètres
- data (np.ndarray | list |QuantumCircuit |circuit.instruction.Instruction | QuantumState) – Un vecteur d'état, une instruction quantique ou un objet doté d'une
to_operatorméthode outo_matrixà partir duquel la matrice de densité peut être construite. Si l'on considère un vecteur, la matrice de densité est définie comme le projecteur de ce vecteur. Dans le cas d'une instruction quantique, la matrice de densité est construite en supposant que tous les qubits sont initialisés à l'état zéro. - dims (int |tuple |list | None) – La dimension du sous-système de l'état (voir informations complémentaires).
Augmentations
QiskitError – si les données saisies ne sont pas valides.
Renseignements supplémentaires :
Le kwarg dims peut être None, un entier ou un itérable d'entiers.
Iterable- les dimensions du sous-système sont les valeurs de la liste, le nombre total de sous-systèmes étant donné par la longueur de la liste.IntouNone- la dimension principale de la matrice d'entrée spécifie la dimension totale de la matrice de densité. S'il s'agit d'une puissance de deux, l'état sera initialisé comme un état à N qubits. S'il ne s'agit pas d'une puissance de deux, l'État aura un seul sous-système d-dimensionnel.
Attributs
atol
Valeur par défaut : 1e-08
data
Données de retour.
dim
Retourner la dimension totale de l'état.
num_qubits
Renvoie le nombre de qubits s'il s'agit d'un état à N qubits ou Aucun dans le cas contraire.
rtol
Valeur par défaut : 1e-05
settings
Paramètres de retour.
Méthodes
conjugate
copy
dims
draw
draw(output=None, **drawer_args)
Affiche une représentation graphique de la matrice de densité.
repr : ASCII TextMatrix de l'État __repr__.
texte : ASCII TextMatrix qui peut être imprimé dans la console.
latex : Un objet IPython Latex à afficher dans les carnets Jupyter.
latex_source : Source ASCII brute, non compilée, pour générer un tableau à l'aide de LaTeX.
qsphere : Matplotlib figure, rendu de la matrice de densité en utilisant plot_state_qsphere().
hinton : Matplotlib figure, rendu de la matrice de densité en utilisant plot_state_hinton().
bloch : Matplotlib figure, rendu de la matrice de densité en utilisant plot_bloch_multivector().
Paramètres
- output (str) – Sélectionnez la méthode de sortie à utiliser pour dessiner l'état. Les choix valables sont repr, text, latex, latex_source, qsphere, hinton ou bloch. La valeur par défaut est repr. La valeur par défaut peut être modifiée en ajoutant la ligne
state_drawer = <default>à~/.qiskit/settings.confsous[default]. - drawer_args - Arguments à passer directement à la fonction de dessin ou au constructeur correspondant ( TextMatrix( ), array_to_latex(), plot_state_qsphere(), plot_state_hinton() ou plot_bloch_multivector()). Voir la fonction concernée sur qiskit.visualization pour la documentation de cette fonction.
Retours
matplotlib.Figure ou str ou TextMatrix ou IPython.display.Latex: Représentation de la matrice de densité.
Augmentations
ValueError - lorsqu'une méthode de sortie non valide est sélectionnée.
evolve
evolve(other, qargs=None)
Faire évoluer un état quantique à l'aide d'un opérateur.
Paramètres
- other (Operator | QuantumChannel |circuit.instruction.Instruction |QuantumCircuit) – L'opérateur à développer.
- qargs (list[int] | None) – une liste de positions du sous-système QuantumState sur lesquelles appliquer l'opérateur.
Retours
La matrice de densité de sortie.
Augmentations
QiskitError – si les dimensions de l'opérateur ne correspondent pas à celles du sous-système « QuantumState » spécifiées.
Type de retour
expand
expand(other)
Retourne le produit tensoriel état other ⊗ self.
Paramètres
other (DensityMatrix) – un objet d'état quantique.
Retours
le produit tensoriel état autre ⊗ self.
Type de retour
Augmentations
QiskitError – si « autre » n'est pas un état quantique.
expectation_value
expectation_value(oper, qargs=None)
Calculer la valeur espérée d'un opérateur.
Paramètres
- oper (Operator) – un opérateur pour évaluer expval.
- qargs (None or list) – les sous-systèmes sur lesquels appliquer l'opérateur.
Retours
la valeur attendue.
Type de retour
from_instruction
classmethod from_instruction(instruction)
Renvoie la matrice de densité de sortie d'une instruction.
Le vecteur d'état est initialisé dans l'état du même nombre de qubits que l'instruction ou le circuit d'entrée, évolué par l'instruction d'entrée, et le vecteur d'état de sortie est renvoyé.
Paramètres
instruction (circuit.instruction.Instruction |QuantumCircuit) – instruction ou circuit
Retours
La matrice de densité finale.
Augmentations
QiskitError – si l'instruction contient des instructions non valides pour la simulation de la matrice de densité.
Type de retour
from_int
static from_int(i, dims)
Retourne une matrice de densité d'état de base de calcul.
Paramètres
- i (int) – l'élément d'état de base.
- dims (int ortuple orlist) – Les dimensions du sous-système du vecteur d'état (voir informations complémentaires).
Retours
L'état de base de calcul .
Type de retour
Renseignements supplémentaires :
Le kwarg dims peut être un entier ou un itérable d'entiers.
Iterable- les dimensions du sous-système sont les valeurs de la liste, le nombre total de sous-systèmes étant donné par la longueur de la liste.Int- l'entier spécifie la dimension totale de l'état. S'il s'agit d'une puissance de deux, l'état sera initialisé comme un état à N qubits. S'il ne s'agit pas d'une puissance de deux, l'État aura un seul sous-système d-dimensionnel.
from_label
classmethod from_label(label)
Retourne un produit tensoriel des états propres de Pauli X,Y,Z.
Libellé | Vecteur d'état |
|---|---|
"0" | |
"1" | |
"+" | |
"-" | |
"r" | |
"l" |
Paramètres
label (string) – une étiquette de chaîne de ket d'état propre (voir le tableau pour les valeurs autorisées).
Retours
La matrice de densité de l'état de base de N-qubits.
Type de retour
Augmentations
QiskitError – si l'étiquette contient des caractères non valides, ou si la longueur de l'étiquette dépasse le nombre de qubits explicitement spécifié num_qubits.
is_valid
measure
measure(qargs=None)
Mesurer les sous-systèmes et renvoyer le résultat et l'état post-mesure.
Notez que cette fonction utilise le générateur de nombres aléatoires interne de QuantumStates pour échantillonner le résultat de la mesure. La graine RNG peut être définie à l'aide de la méthode seed() méthode.
Paramètres
qargs (list or None) – sous-systèmes pour lesquels les mesures doivent être échantillonnées; si aucun, les mesures de tous les sous-systèmes doivent être échantillonnées (valeur par défaut : aucun).
Retours
la paire (outcome, state) où outcome est le
l'étiquette de la chaîne de caractères du résultat de la mesure, et state l'état post-mesure effondré pour le résultat correspondant.
Type de retour
partial_transpose
partial_transpose(qargs)
Retourne la matrice de densité partiellement transposée.
Paramètres
qargs (list) – Les sous-systèmes à transposer.
Retours
La matrice de densité partiellement transposée.
Type de retour
probabilities
probabilities(qargs=None, decimals=None)
Retourne le vecteur de probabilité de mesure du sous-système.
Les probabilités de mesure se rapportent à la mesure dans la base de calcul (diagonale).
Paramètres
- qargs (None or list) – sous-systèmes pour lesquels les probabilités doivent être renvoyées, si aucun, elles doivent être renvoyées pour tous les sous-systèmes (par défaut : aucun).
- decimals (None or int) – le nombre de décimales à arrondir. Si None, aucun arrondi n'est effectué (par défaut : None).
Retours
Le tableau de vecteurs Numpy des probabilités.
Type de retour
np.array
Exemples
Considérons un état produit à 2 qubits avec , .
from qiskit.quantum_info import DensityMatrix
rho = DensityMatrix.from_label('+0')
# Probabilities for measuring both qubits
probs = rho.probabilities()
print('probs: {}'.format(probs))
# Probabilities for measuring only qubit-0
probs_qubit_0 = rho.probabilities([0])
print('Qubit-0 probs: {}'.format(probs_qubit_0))
# Probabilities for measuring only qubit-1
probs_qubit_1 = rho.probabilities([1])
print('Qubit-1 probs: {}'.format(probs_qubit_1))probs: [0.5 0. 0.5 0. ]
Qubit-0 probs: [1. 0.]
Qubit-1 probs: [0.5 0.5]Nous pouvons également permuter l'ordre des qubits dans la liste qargs pour modifier la position du qubit dans la sortie des probabilités
from qiskit.quantum_info import DensityMatrix
rho = DensityMatrix.from_label('+0')
# Probabilities for measuring both qubits
probs = rho.probabilities([0, 1])
print('probs: {}'.format(probs))
# Probabilities for measuring both qubits
# but swapping qubits 0 and 1 in output
probs_swapped = rho.probabilities([1, 0])
print('Swapped probs: {}'.format(probs_swapped))probs: [0.5 0. 0.5 0. ]
Swapped probs: [0.5 0.5 0. 0. ]probabilities_dict
probabilities_dict(qargs=None, decimals=None)
Retourne le dictionnaire des probabilités de mesure du sous-système.
Les probabilités de mesure se rapportent à la mesure dans la base de calcul (diagonale).
Cette représentation du dictionnaire utilise une notation de type Ket où les clés du dictionnaire sont des chaînes de caractères pour les vecteurs de base du sous-système. Si un sous-système a une dimension supérieure à 10, des virgules sont insérées entre les nombres entiers afin de pouvoir distinguer les sous-systèmes.
Paramètres
- qargs (None or list) – sous-systèmes pour lesquels les probabilités doivent être renvoyées, si aucun, elles doivent être renvoyées pour tous les sous-systèmes (par défaut : aucun).
- decimals (None or int) – le nombre de décimales à arrondir. Si None, aucun arrondi n'est effectué (par défaut : None).
Retours
Les probabilités de mesure sous forme de dict (ket).
Type de retour
purity
reset
reset(qargs=None)
Réinitialiser l'état ou les sous-systèmes à l'état 0.
Paramètres
qargs (list or None) – sous-systèmes à réinitialiser, si Aucun, tous les sous-systèmes seront réinitialisés à l'état 0 (par défaut : Aucun).
Retours
l'état de réinitialisation.
Type de retour
Renseignements supplémentaires :
Si tous les sous-systèmes sont réinitialisés, cela rétablit l'état de base sur tous les sous-systèmes. Si seuls certains sous-systèmes sont réinitialisés, cette fonction effectuera une évolution à partir de la réinitialisation SuperOp de ces sous-systèmes.
reverse_qargs
reverse_qargs()
Retourne un DensityMatrix avec l'ordre inversé des sous-systèmes.
Pour un produit tensoriel, cela revient à inverser l'ordre des sous-systèmes du produit tensoriel. Pour une matrice de densité , l'état retourné sera .
Retours
l'État avec l'ordre inversé des sous-systèmes.
Type de retour
sample_counts
sample_counts(shots, qargs=None)
Échantillonner une série de résultats de mesures de qubits dans la base de calcul.
Paramètres
- shots (int) – le nombre d'échantillons à générer.
- qargs (None or list) – sous-systèmes pour lesquels les mesures doivent être échantillonnées; si aucun, les mesures de tous les sous-systèmes doivent être échantillonnées (valeur par défaut : aucun).
Retours
dictionnaire des comptages échantillonnés.
Type de retour
Information supplémentaires :
Cette fonction échantillonne les résultats des mesures en utilisant la mesure
probabilities()pour l'état actuel et les qargs. Il ne met pas en œuvre la mesure, de sorte que l'état actuel n'est pas modifié.La graine du générateur de nombres aléatoires utilisée pour l'échantillonnage peut être définie sur une valeur fixe à l'aide de la méthode
seed()state.
sample_memory
sample_memory(shots, qargs=None)
Échantillonner une liste de résultats de mesures de qubits dans la base de calcul.
Paramètres
- shots (int) – le nombre d'échantillons à générer.
- qargs (None or list) – sous-systèmes pour lesquels les mesures doivent être échantillonnées; si aucun, les mesures de tous les sous-systèmes doivent être échantillonnées (valeur par défaut : aucun).
Retours
liste des valeurs échantillonnées dans l'ordre où elles ont été relevées.
Type de retour
np.array
Information supplémentaires :
Cette fonction échantillonne les résultats des mesures en utilisant la mesure
probabilities()pour l'état actuel et les qargs. Il ne met pas en œuvre la mesure, de sorte que l'état actuel n'est pas modifié.La graine du générateur de nombres aléatoires utilisée pour l'échantillonnage peut être définie sur une valeur fixe à l'aide de la méthode
seed()state.
seed
tensor
tensor(other)
Retourne le produit tensoriel état self ⊗ other.
Paramètres
other (DensityMatrix) – un objet d'état quantique.
Retours
l'opérateur de produit tensoriel self ⊗ other.
Type de retour
Augmentations
QiskitError – si « autre » n'est pas un état quantique.
to_dict
to_dict(decimals=None)
Convertir la matrice de densité en forme de dictionnaire.
Cette représentation du dictionnaire utilise une notation de type Ket où les clés du dictionnaire sont des chaînes de caractères pour les vecteurs de base du sous-système. Si un sous-système a une dimension supérieure à 10, des virgules sont insérées entre les nombres entiers afin de pouvoir distinguer les sous-systèmes.
Paramètres
decimals (None or int) – le nombre de décimales à arrondir. Si None, aucun arrondi n'est effectué (par défaut : None).
Retours
la forme dictionnaire de l'adresse DensityMatrix.
Type de retour
Exemples
La forme cétale d'une matrice de densité à 2 qubits
from qiskit.quantum_info import DensityMatrix
rho = DensityMatrix.from_label('-0')
print(rho.to_dict()){
'00|00': (0.4999999999999999+0j),
'10|00': (-0.4999999999999999-0j),
'00|10': (-0.4999999999999999+0j),
'10|10': (0.4999999999999999+0j)
}Pour les sous-systèmes non quantiques, la plage de nombres entiers peut aller de 0 à 9. Par exemple, dans un système qutrit
import numpy as np
from qiskit.quantum_info import DensityMatrix
mat = np.zeros((9, 9))
mat[0, 0] = 0.25
mat[3, 3] = 0.25
mat[6, 6] = 0.25
mat[-1, -1] = 0.25
rho = DensityMatrix(mat, dims=(3, 3))
print(rho.to_dict()){'00|00': (0.25+0j), '10|10': (0.25+0j), '20|20': (0.25+0j), '22|22': (0.25+0j)}Pour les grandes dimensions des sous-systèmes, des délimiteurs sont nécessaires. L'exemple suivant concerne un système à 20 dimensions composé d'un qubit et d'un qudit à 10 dimensions.
import numpy as np
from qiskit.quantum_info import DensityMatrix
mat = np.zeros((2 * 10, 2 * 10))
mat[0, 0] = 0.5
mat[-1, -1] = 0.5
rho = DensityMatrix(mat, dims=(2, 10))
print(rho.to_dict()){'00|00': (0.5+0j), '91|91': (0.5+0j)}to_operator
to_statevector
to_statevector(atol=None, rtol=None)
Renvoie un vecteur d'état à partir d'une matrice de densité pure.
Paramètres
- atol (float) – Tolérance absolue pour le contrôle de la validité de l'opération.
- rtol (float) – Tolérance relative pour le contrôle de la validité de l'opération.
Retours
Le vecteur d'état correspondant à la matrice de densité pure.
Correspond au vecteur propre de la seule valeur propre non nulle.
Type de retour
Augmentations
QiskitError – si l'état n'est pas pur.