Vector de estado
class qiskit.quantum_info.Statevector(data, dims=None)
Bases: QuantumState, TolerancesMixin
Clase Statevector
Inicializa un objeto vector de estado.
Parámetros
- data (np.ndarray | list |Statevector |Operator |QuantumCircuit |circuit.instruction.Instruction) – Datos a partir de los cuales se puede construir el vector de estado. Puede ser un vector complejo, otro vector de estado, un
Operatorcon una sola columna o unQuantumCircuitoInstruction. Si los datos son un circuito o una instrucción, el vector de estado se construye asumiendo que todos los qubits se inicializan al 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.Into bienNone: la longitud del vector de entrada determina la dimensión total del estado. Si se trata de una potencia de dos, el estado se inicializará como un estado de N qubits. Si no es una potencia de dos, el estado tendrá un único subsistema de dimensión d.
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 visualización del vector Estado.
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 del vector de estado mediante plot_state_qsphere().
hinton : Matplotlib figura, representación del vector de estado mediante plot_state_hinton().
bloch : Matplotlib figura, representación del vector de estado utilizando plot_bloch_multivector().
ciudad : Matplotlib figura, representación del vector estado mediante plot_state_city().
paulivec : Matplotlib figura, representación del vector de estado mediante plot_state_paulivec().
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, bloch, city o paulivec. 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: Dibujo del vector de estado.
Eleva
ValueError - cuando se selecciona un método de salida no válido.
Ejemplos
Parcela uno de los estados de Bell
from numpy import sqrt
from qiskit.quantum_info import Statevector
sv=Statevector([1/sqrt(2), 0, 0, -1/sqrt(2)])
sv.draw(output='hinton')
equiv
equiv(other, rtol=None, atol=None)
Devuelve True si otro es equivalente como vector de estado hasta la fase global.
Si other no es un vector de estado, pero puede utilizarse para inicializar un objeto vector de estado, se comprobará que Statevector(other) es equivalente al vector de estado actual hasta la fase global.
Parámetros
- other (Statevector) – un objeto a partir del cual se puede construir un
Statevector. - rtol (float) – valor relativo de tolerancia para la comparación.
- atol (float) – valor absoluto de tolerancia para la comparación.
Devuelve
Verdadero si los vectores de estado son equivalentes hasta la fase global.
Tipo de retorno
evolve
evolve(other, qargs=None)
Evolucionar un estado cuántico mediante el operador.
Parámetros
- other (Operator |QuantumCircuit |circuit.Instruction) – El operador para evolucionar.
- qargs (list) – una lista de posiciones del subsistema Statevector sobre las que aplicar el operador.
Devuelve
el estado cuántico de salida.
Tipo de retorno
Eleva
QiskitError - si la dimensión del operador no coincide con las dimensiones del subsistema Statevector especificadas.
expand
expand(other)
Devuelve el producto tensorial estado otro ⊗ self.
Parámetros
other (Statevector) – 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 de.
- qargs (None or list) – subsistemas en los que aplicar el operador.
Devuelve
el valor esperado.
Tipo de retorno
from_circuit
classmethod from_circuit(circuit, ignore_set_layout=False)
Crear un vector de estado a partir de un circuito cuántico.
Parámetros
- circuit (QuantumCircuit) – Un circuito cuántico
- ignore_set_layout (bool) – Cuando se establece en
True, si la entradacircuittiene un diseño establecido, se ignorará. El valor predeterminado esFalse.
Devuelve
El vector de estado obtenido al aplicar el circuito al estado de entrada totalmente cero.
Tipo de retorno
Ejemplo
Crear un vector de estado a partir de un circuito transpuesto:
from qiskit import QuantumCircuit, transpile
from qiskit.quantum_info import Statevector
from qiskit.providers.basic_provider import BasicSimulator
qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.swap(1, 2)
backend = BasicSimulator()
transpiled1 = transpile(qc, backend, optimization_level=0)
transpiled2 = transpile(qc, backend, optimization_level=2)
# Get statevectors accounting for layout changes
sv1 = Statevector.from_circuit(transpiled1)
sv2 = Statevector.from_circuit(transpiled2)
# These will be equivalent up to global phase
print(sv1.equiv(sv2)) # Truefrom_instruction
classmethod from_instruction(instruction)
Devuelve el vector de estado 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 (qiskit.circuit.Instruction orQuantumCircuit) – instrucción o circuito
Devuelve
El vector de estado final.
Tipo de retorno
Eleva
QiskitError - si la instrucción contiene instrucciones no válidas para la simulación del vector de estado.
from_int
static from_int(i, dims)
Devuelve un vector 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
El vector de estado del estado de base de N qubits.
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.
inner
inner(other)
Devuelve el producto interior de uno mismo y otro como .
Parámetros
other (Statevector) – un objeto de estado cuántico.
Devuelve
el producto interior del yo y el otro, .
Tipo de retorno
np.complex128
Eleva
QiskitError - si el otro no es un estado cuántico o tiene una dimensión diferente.
is_valid
is_valid(atol=None, rtol=None)
Devuelve True si un vector de estado tiene norma 1.
Parámetros
Tipo de retorno
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
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 .
from qiskit.quantum_info import Statevector
psi = Statevector.from_label('+0')
# Probabilities for measuring both qubits
probs = psi.probabilities()
print('probs: {}'.format(probs))
# Probabilities for measuring only qubit-0
probs_qubit_0 = psi.probabilities([0])
print('Qubit-0 probs: {}'.format(probs_qubit_0))
# Probabilities for measuring only qubit-1
probs_qubit_1 = psi.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 Statevector
psi = Statevector.from_label('+0')
# Probabilities for measuring both qubits
probs = psi.probabilities([0, 1])
print('probs: {}'.format(probs))
# Probabilities for measuring both qubits
# but swapping qubits 0 and 1 in output
probs_swapped = psi.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 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 realizará una medición en dichos subsistemas y hará que estos evolucionen de tal forma que los estados colapsados tras la medición se roten hasta el estado 0. La semilla del generador de números aleatorios (RNG) para este muestreo se puede configurar mediante el seed() método.
reverse_qargs
reverse_qargs()
Devuelve un vector de estados 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 un vector de estado el vector de estado devuelto será .
Devuelve
el vector de 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 ejecuta 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 ejecuta 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 (Statevector) – 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 el vector de estado 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 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 del vector Estado.
Tipo de retorno
Ejemplo
La forma ket de un vector de estado de 2 qubits
from qiskit.quantum_info import Statevector
psi = Statevector.from_label('-0')
print(psi.to_dict()){'00': (0.7071067811865475+0j), '10': (-0.7071067811865475+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 Statevector
vec = np.zeros(9)
vec[0] = 1 / np.sqrt(2)
vec[-1] = 1 / np.sqrt(2)
psi = Statevector(vec, dims=(3, 3))
print(psi.to_dict()){'00': (0.7071067811865475+0j), '22': (0.7071067811865475+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 Statevector
vec = np.zeros(2 * 10)
vec[0] = 1 / np.sqrt(2)
vec[-1] = 1 / np.sqrt(2)
psi = Statevector(vec, dims=(2, 10))
print(psi.to_dict()){'00': (0.7071067811865475+0j), '91': (0.7071067811865475+0j)}to_operator
trace
trace()
Devuelve la traza del estado cuántico como una matriz de densidad.
Tipo de retorno
float64