DensityMatrix
class qiskit.quantum_info.DensityMatrix(data, dims=None)
Bases: QuantumState, TolerancesMixin
DensityMatrix clase
Inicializar un objeto matriz de densidad.
Parámetros
- data (np.ndarray | list |QuantumCircuit |circuit.instruction.Instruction | QuantumState) – Un vector de estado, una instrucción cuántica o un objeto con un método
to_operatoroto_matrixa partir del cual se puede construir la matriz de densidad. Si es un vector, la matriz de densidad se construye como el proyector de ese vector. Si se trata de una instrucción cuántica, la matriz de densidad se construye suponiendo que todos los qubits se inicializan en el estado cero. - dims (int |tuple |list | None) – Dimensión del subsistema del estado (Ver información adicional).
Eleva
QiskitError - si los datos de entrada no son válidos.
Información adicional:
El kwarg de dims puede ser Ninguno, un entero o un iterable de enteros.
Iterable- las dimensiones del subsistema son los valores de la lista con el número total de subsistemas dado por la longitud de la lista.IntoNone- la dimensión principal de la matriz de entrada especifica la dimensión total de la matriz de densidad. Si es una potencia de dos, el estado se inicializará como un estado N-qubit. Si no es una potencia de dos, el estado tendrá un único subsistema d-dimensional.
Atributos
atol
Valor predeterminado: 1e-08
data
Devuelve los datos.
dim
Devuelve la dimensión total del estado.
num_qubits
Devuelve el número de qubits si es un estado N-qubit o Ninguno en caso contrario.
rtol
Valor predeterminado: 1e-05
settings
Devuelve los ajustes.
Métodos
conjugate
copy
dims
draw
draw(output=None, **drawer_args)
Devuelve una representación gráfica de la matriz de densidad.
repr: ASCII TextMatrix del estado __repr__.
texto : ASCII TextMatrix que se puede imprimir en la consola.
latex : Un objeto IPython Latex para mostrar en Jupyter Notebooks.
latex_source : Fuente ASCII sin compilar para generar matrices utilizando LaTeX.
qsphere : Matplotlib figura, representación de la matriz de densidad mediante plot_state_qsphere().
hinton : Matplotlib figura, representación de la matriz de densidad mediante plot_state_hinton().
bloch : Matplotlib figura, representación de la matriz de densidad mediante plot_bloch_multivector().
Parámetros
- output (str) – Seleccione el método de salida que se utilizará para dibujar el estado. Las opciones válidas son repr, text, latex, latex_source, qsphere, hinton o bloch. Por defecto es repr. El valor predeterminado puede modificarse añadiendo la línea
state_drawer = <default>a~/.qiskit/settings.confen[default]. - drawer_args - Argumentos a pasar directamente a la función de dibujo o constructor relevante ( TextMatrix( ), array_to_latex(), plot_state_qsphere(), plot_state_hinton() o plot_bloch_multivector()). Consulte la documentación de la función correspondiente en qiskit.visualization.
Devuelve
matplotlib.Figure o str o TextMatrix o IPython.display.Latex: Representación de la matriz de densidad.
Eleva
ValueError - cuando se selecciona un método de salida no válido.
evolve
evolve(other, qargs=None)
Evolucionar un estado cuántico mediante un operador.
Parámetros
- other (Operator | QuantumChannel |circuit.instruction.Instruction |QuantumCircuit) – El operador para evolucionar.
- qargs (list[int] | None) – una lista de posiciones del subsistema QuantumState sobre las que aplicar el operador.
Devuelve
La matriz de densidad de salida.
Eleva
QiskitError - si la dimensión del operador no coincide con las dimensiones del subsistema QuantumState especificadas.
Tipo de retorno
expand
expand(other)
Devuelve el producto tensorial estado otro ⊗ self.
Parámetros
other (DensityMatrix) – un objeto de estado cuántico.
Devuelve
el producto tensorial estado otro ⊗ self.
Tipo de retorno
Eleva
QiskitError - si el otro no es un estado cuántico.
expectation_value
expectation_value(oper, qargs=None)
Calcular el valor esperado de un operador.
Parámetros
- oper (Operator) – un operador para evaluar expval.
- qargs (None or list) – subsistemas en los que aplicar el operador.
Devuelve
el valor esperado.
Tipo de retorno
from_instruction
classmethod from_instruction(instruction)
Devuelve la matriz de densidad de salida de una instrucción.
El vector de estado se inicializa en el estado del mismo número de qubits que la instrucción o circuito de entrada, evolucionado por la instrucción de entrada, y se devuelve el vector de estado de salida.
Parámetros
instruction (circuit.instruction.Instruction |QuantumCircuit) – instrucción o circuito
Devuelve
La matriz de densidad final.
Eleva
QiskitError - si la instrucción contiene instrucciones no válidas para la simulación de matrices de densidad.
Tipo de retorno
from_int
static from_int(i, dims)
Devuelve una matriz de densidad de estado de base computacional.
Parámetros
- i (int) – el elemento de estado base.
- dims (int ortuple orlist) – Las dimensiones del subsistema del vector de estado (Ver información adicional).
Devuelve
El estado base computacional .
Tipo de retorno
Información adicional:
El kwarg de dims puede ser un entero o un iterable de enteros.
Iterable- las dimensiones del subsistema son los valores de la lista con el número total de subsistemas dado por la longitud de la lista.Int- el número entero especifica la dimensión total del estado. Si es una potencia de dos, el estado se inicializará como un estado N-qubit. Si no es una potencia de dos, el estado tendrá un único subsistema d-dimensional.
from_label
classmethod from_label(label)
Devuelve un producto tensorial de estados propios Pauli X,Y,Z.
Etiqueta | Vector de estado |
|---|---|
"0" | |
"1" | |
"+" | |
"-" | |
"r" | |
"l" |
Parámetros
label (string) – una etiqueta de cadena KET de un estado propio (véase la tabla para conocer los valores permitidos).
Devuelve
La matriz de densidad del estado base N-qubit.
Tipo de retorno
Eleva
QiskitError - si la etiqueta contiene caracteres no válidos, o la longitud de la etiqueta es mayor que un num_qubits especificado explícitamente.
is_valid
measure
measure(qargs=None)
Medir los subsistemas y devolver el resultado y el estado posterior a la medición.
Tenga en cuenta que esta función utiliza el generador interno de números aleatorios QuantumStates para el muestreo del resultado de la medición. La semilla RNG puede establecerse utilizando el método seed() método.
Parámetros
qargs (list or None) – subsistemas para los que muestrear las mediciones; si es Ninguno, muestrea la medición de todos los subsistemas (Predeterminado: Ninguno).
Devuelve
el par (outcome, state) donde outcome es el
y state es el estado post-medición colapsado para el resultado correspondiente.
Tipo de retorno
partial_transpose
partial_transpose(qargs)
Devuelve la matriz de densidad parcialmente transpuesta.
Parámetros
qargs (list) – Los subsistemas que deben transponerse.
Devuelve
La matriz de densidad parcialmente transpuesta.
Tipo de retorno
probabilities
probabilities(qargs=None, decimals=None)
Devuelve el vector de probabilidad de medición del subsistema.
Las probabilidades de medición son con respecto a la medición en la base de cálculo (diagonal).
Parámetros
- qargs (None or list) – subsistemas para los que devolver probabilidades, si es Ninguno devolverá para todos los subsistemas (Por defecto: Ninguno).
- decimals (None or int) – el número de decimales para redondear los valores. Si es Ninguno no se redondea (Por defecto: Ninguno).
Devuelve
La matriz vectorial Numpy de probabilidades.
Tipo de retorno
np.array
Ejemplos
Consideremos un estado producto de 2 qubits con , .
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]También podemos permutar el orden de los qubits en la lista qargs para cambiar la posición del qubit en la salida de probabilidades
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)
Devuelve el diccionario de probabilidades de medición del subsistema.
Las probabilidades de medición son con respecto a la medición en la base de cálculo (diagonal).
Esta representación de diccionario utiliza una notación tipo Ket en la que las claves del diccionario son cadenas qudit para los vectores base del subsistema. Si algún subsistema tiene una dimensión superior a 10, se insertan delimitadores de coma entre los números enteros para poder distinguir los subsistemas.
Parámetros
- qargs (None or list) – subsistemas para los que devolver probabilidades, si es Ninguno devolverá para todos los subsistemas (Por defecto: Ninguno).
- decimals (None or int) – el número de decimales para redondear los valores. Si es Ninguno no se redondea (Por defecto: Ninguno).
Devuelve
Las probabilidades de medición en forma dict (ket).
Tipo de retorno
purity
reset
reset(qargs=None)
Restablece el estado o los subsistemas al estado 0.
Parámetros
qargs (list or None) – subsistemas a reiniciar, si es Ninguno todos los subsistemas se reiniciarán a su estado 0 (Por defecto: Ninguno).
Devuelve
el estado de reinicio.
Tipo de retorno
Información adicional:
Si se reinician todos los subsistemas, esto restablecerá el estado inicial en todos ellos. Si solo se reinician algunos subsistemas, esta función llevará a cabo la evolución a partir del reinicio SuperOp de dichos subsistemas.
reverse_qargs
reverse_qargs()
Devuelve un DensityMatrix con el orden de los subsistemas invertido.
Para un estado de producto tensorial, esto equivale a invertir el orden de los subsistemas del producto tensorial. Para una matriz de densidad el estado devuelto será .
Devuelve
el estado con el orden de los subsistemas invertido.
Tipo de retorno
sample_counts
sample_counts(shots, qargs=None)
Muestrear un dictado de resultados de medición de qubits en la base de cálculo.
Parámetros
- shots (int) – número de muestras a generar.
- qargs (None or list) – subsistemas para los que muestrear las mediciones; si es Ninguno, muestrea la medición de todos los subsistemas (Predeterminado: Ninguno).
Devuelve
diccionario de recuentos muestreados.
Tipo de retorno
Información adicional:
Esta función muestrea los resultados de la medición utilizando la medida
probabilities()para el estado actual y qargs. En realidad, no realiza la medición, por lo que el estado actual no se modifica.La semilla del generador de números aleatorios utilizada para el muestreo se puede establecer en un valor fijo mediante el método
seed()state.
sample_memory
sample_memory(shots, qargs=None)
Muestra una lista de resultados de medición de qubits en la base de cálculo.
Parámetros
- shots (int) – número de muestras a generar.
- qargs (None or list) – subsistemas para los que muestrear las mediciones; si es Ninguno, muestrea la medición de todos los subsistemas (Predeterminado: Ninguno).
Devuelve
lista de recuentos muestreados en el orden en que se obtuvieron.
Tipo de retorno
np.array
Información adicional:
Esta función muestrea los resultados de la medición utilizando la medida
probabilities()para el estado actual y qargs. En realidad, no realiza la medición, por lo que el estado actual no se modifica.La semilla del generador de números aleatorios utilizada para el muestreo se puede establecer en un valor fijo mediante el método
seed()state.
seed
tensor
tensor(other)
Devuelve el producto tensorial estado self ⊗ other.
Parámetros
other (DensityMatrix) – un objeto de estado cuántico.
Devuelve
el operador producto tensorial yo ⊗ otro.
Tipo de retorno
Eleva
QiskitError - si el otro no es un estado cuántico.
to_dict
to_dict(decimals=None)
Convierte la matriz de densidad en forma de diccionario.
Esta representación de diccionario utiliza una notación tipo Ket en la que las claves del diccionario son cadenas qudit para los vectores base del subsistema. Si algún subsistema tiene una dimensión superior a 10, se insertan delimitadores de coma entre los números enteros para poder distinguir los subsistemas.
Parámetros
decimals (None or int) – el número de decimales para redondear los valores. Si es Ninguno no se redondea (Por defecto: Ninguno).
Devuelve
la forma de diccionario de DensityMatrix.
Tipo de retorno
Ejemplos
La forma ket de una matriz de densidad de 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)
}Para los subsistemas no qubits, el rango de enteros puede ir de 0 a 9. Por ejemplo, en un sistema 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)}Para grandes dimensiones de subsistema se requieren delimitadores. El siguiente ejemplo corresponde a un sistema de 20 dimensiones formado por un qubit y un qudit de 10 dimensiones.
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)
Devuelve un vector de estado de una matriz de densidad pura.
Parámetros
- atol (float) – Tolerancia absoluta para comprobar la validez de la operación.
- rtol (float) – Tolerancia relativa para comprobar la validez de la operación.
Devuelve
El vector de estado correspondiente a la matriz de densidad pura.
Corresponde al vector propio del único valor propio distinto de cero.
Tipo de retorno
Eleva
QiskitError - si el estado no es puro.