Skip to main content
IBM Quantum Platform

Operador

class qiskit.quantum_info.Operator(data, input_dims=None, output_dims=None)

GitHub

Bases: LinearOp

Clase de operador matricial

Esto representa un operador matricial MM que evolve() a Statevector ψ|\psi\rangle por multiplicación matriz-vector

ψMψ,|\psi\rangle \mapsto M|\psi\rangle,

y se evolve() a DensityMatrix ρ\rho por multiplicación izquierda y derecha

ρMρM.\rho \mapsto M \rho M^\dagger.

Por ejemplo, el siguiente operador M=XM = X aplicado al estado cero ψ=0(ρ=00)|\psi\rangle=|0\rangle (\rho = |0\rangle\langle 0|) lo cambia al estado uno ψ=1(ρ=11)|\psi\rangle=|1\rangle (\rho = |1\rangle\langle 1|) :

>>> import numpy as np
>>> from qiskit.quantum_info import Operator
>>> op = Operator(np.array([[0.0, 1.0], [1.0, 0.0]]))  # Represents Pauli X operator
>>> from qiskit.quantum_info import Statevector
>>> sv = Statevector(np.array([1.0, 0.0]))
>>> sv.evolve(op)
Statevector([0.+0.j, 1.+0.j],
            dims=(2,))
>>> from qiskit.quantum_info import DensityMatrix
>>> dm = DensityMatrix(np.array([[1.0, 0.0], [0.0, 0.0]]))
>>> dm.evolve(op)
DensityMatrix([[0.+0.j, 0.+0.j],
            [0.+0.j, 1.+0.j]],
            dims=(2,))

Inicializar un objeto operador.

Parámetros

  • data (QuantumCircuit |Operation | BaseOperator | np.ndarray) – datos para inicializar el operador.
  • input_dims (tuple | None) – las dimensiones del subsistema de entrada.
  • output_dims (tuple | None) – las dimensiones del subsistema de salida.

Eleva

QiskitError - si los datos de entrada no pueden inicializarse como un operador.

Información adicional:

Si las dimensiones de entrada o salida son Ninguna, se determinarán automáticamente a partir de los datos de entrada. Si los datos de entrada son una matriz Numpy de forma ( 2**N, 2**N ) se utilizarán sistemas qubit. Si el operador de entrada no es un operador N-qubit, asignará un único subsistema con dimensión especificada por la forma de la entrada. Nótese que dos operadores inicializados mediante este método sólo se consideran equivalentes si coinciden en su orden canónico de qubits (o: permutación). Véase Operator.from_circuit() para especificar una permutación de qubits diferente.


Atributos

atol

Valor predeterminado: 1e-08

data

El array Numpy subyacente.

dim

Devuelve una tupla (forma_entrada, forma_salida).

num_qubits

Devuelve el número de qubits si es un operador N-qubit o Ninguno en caso contrario.

qargs

Devuelve los qargs para el operador.

rtol

Valor predeterminado: 1e-05

settings

Devuelve los ajustes del operador.


Métodos

adjoint

adjoint()

GitHub

Devuelve el adjunto del Operador.

Tipo de retorno

Uno mismo

apply_permutation

apply_permutation(perm, front=False)

GitHub

Modifica los datos del operador componiéndolos con una permutación.

Parámetros

  • perm (list) – patrón de permutación, que describe qué qubits ocupan las posiciones 0, 1, 2, etc. tras aplicar la permutación.
  • front (bool) – Cuando se establece en True la permutación se aplica antes del operador, cuando se establece en False la permutación se aplica después del operador.

Devuelve

El operador modificado.

Tipo de retorno

Operador

Eleva

QiskitError - si el tamaño del patrón de permutación no coincide con las dimensiones del operador.

compose

compose(other, qargs=None, front=False)

GitHub

Devuelve la composición del operador con otro Operador.

Parámetros

  • other (Operator) – un objeto Operador.
  • qargs (list or None) – una lista de posiciones de subsistemas a las que aplicar otras. Si se aplica «None» a todos los subsistemas (valor predeterminado: None).
  • front (bool) – Si es True compone usando el operador derecho de multiplicación, en lugar del izquierdo [por defecto: Falso].

Devuelve

El operador compuesto.

Tipo de retorno

Operador

Eleva

QiskitError - si otro no puede convertirse en operador o tiene dimensiones incompatibles para los subsistemas especificados.

Nota

La composición (&) se define por defecto como multiplicación matricial izquierda para los operadores matriciales, mientras que @ (equivalente a dot()) se define como multiplicación matricial derecha. Es decir, que A & B == A.compose(B) es equivalente a B @ A == B.dot(A) cuando A y B son del mismo tipo.

Si se configura el parámetro front=True kwarg, la multiplicación de matrices a la derecha es equivalente al método dot() método A.dot(B) == A.compose(B, front=True).

conjugate

conjugate()

GitHub

Devuelve el conjugado del Operador.

copy

copy()

GitHub

Realiza una copia en profundidad del operador actual.

dot

dot(other, qargs=None)

GitHub

Devuelve el operador multiplicado por la derecha self * other.

Parámetros

  • other (Operator) – un objeto operador.
  • qargs (list or None) – una lista de posiciones de subsistemas a las que aplicar otras. Si se aplica «None» a todos los subsistemas (valor predeterminado: None).

Devuelve

La matriz derecha multiplicada Operador.

Tipo de retorno

Operador

Nota

El producto punto puede obtenerse utilizando el operador binario @ . Por tanto, a.dot(b) es equivalente a a @ b.

draw

draw(output=None, **drawer_args)

GitHub

Devuelve una visualización del Operador.

repr : Cadena 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.

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, Por defecto es repr.
  • drawer_args - Argumentos que se pasarán directamente a la función de dibujo o constructor relevante ( TextMatrix( ), array_to_latex()). Consulte la documentación de la función correspondiente en qiskit.visualization.

Devuelve

Dibujo del operador.

Tipo de retorno

str o TextMatrix o IPython.display.Latex

Eleva

  • ValueError - cuando se selecciona un método de salida no válido.
  • MissingOptionalLibrary - Si SymPy no está instalado y se selecciona 'latex' o 'latex_source' para output.

equiv

equiv(other, rtol=None, atol=None)

GitHub

Devuelve True si los operadores son equivalentes hasta la fase global.

Parámetros

  • other (Operator) – un objeto operador.
  • rtol (float) – valor relativo de tolerancia para la comparación.
  • atol (float) – valor absoluto de tolerancia para la comparación.

Devuelve

Verdadero si los operadores son equivalentes hasta la fase global.

Tipo de retorno

bool

expand

expand(other)

GitHub

Devuelve el producto tensorial de orden inverso con otro Operador.

Parámetros

other (Operator) – un objeto Operador.

Devuelve

el producto tensorial bab \otimes a, donde aa

es el Operador actual, y bb es el otro Operador.

Tipo de retorno

Operador

from_circuit

classmethod from_circuit(circuit, ignore_set_layout=False, layout=None, final_layout=None)

GitHub

Crear un nuevo objeto Operador a partir de un QuantumCircuit

Mientras que un QuantumCircuit puede pasarse directamente como data al constructor de la clase, esto no proporciona opciones sobre cómo se utiliza el circuito para crear un objeto Operator. Este método constructor le permite controlar cómo se crea el Operator de modo que pueda ajustarse a un caso de uso concreto.

Por defecto, este método constructor permutará los qubits basándose en una disposición inicial configurada (es decir, después de haber sido transpilada). También proporciona una opción para proporcionar manualmente un Layout objeto directamente.

Parámetros

  • circuit (QuantumCircuit) – La dirección QuantumCircuit para crear un objeto Operador.
  • ignore_set_layout (bool) – Cuando se establece en True si la entrada circuit tiene un diseño establecido será ignorado
  • layout (Layout) – Si se especifica este kwarg se puede utilizar para especificar un diseño particular a utilizar para permutar los qubits en el creado Operator. Si se especifica esto, se utilizará en lugar de un diseño contenido en la entrada circuit . Si se especifica los bits virtuales en la Layout deben estar presentes en la entrada circuit .
  • final_layout (Layout) – Si se especifica, este kwarg se puede utilizar para representar la permutación de salida causada por las inserciones de intercambio durante la etapa de enrutamiento del transpilador.

Devuelve

Un operador que representa el circuito de entrada

Tipo de retorno

Operador

from_label

classmethod from_label(label)

GitHub

Devuelve un producto tensorial de operadores single-qubit.

Parámetros

label (string) – cadena de operadores monocubitales.

Devuelve

El operador N-qubit.

Tipo de retorno

Operador

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.

Información adicional:

Las etiquetas corresponden a las matrices de un solo qubit: 'I': [ [1, 0], [0, 1] ] 'X': [ [0, 1], [1, 0] ] 'Y': [ [0, -1j], [1j, 0] ] 'Z': [ [1, 0], [0, -1] ] 'H': [ [1, 1], [1, -1] ] / sqrt(2) 'S': [ [1, 0], [0, 1j] ] 'T': [ [1, 0], [0, ( 1+1j ) / sqrt(2)] ] '0': [ [1, 0], [0, 0] ] '1': [ [0, 0], [0, 1] ] '+': [ [0.5, 0.5], 0.5 [0.5 0.5] ] '-': [ [0.5, -0.5], [-0.5, 0.5] ] 'r': [ [0.5, -0.5j], [0.5j, 0.5] ] 'l': [ [0.5, 0.5j], [-0.5j, 0.5] ]

input_dims

input_dims(qargs=None)

GitHub

Devuelve tupla de dimensión de entrada para subsistemas especificados.

is_unitary

is_unitary(atol=None, rtol=None)

GitHub

Devuelve True si el operador es una matriz unitaria.

output_dims

output_dims(qargs=None)

GitHub

Devuelve tupla de dimensión de salida para subsistemas especificados.

power

power(n, branch_cut_rotation=3.141592653589793e-12, assume_unitary=False)

GitHub

Devuelve la potencia matricial del operador.

Las potencias no enteras de operadores con un valor propio cuya fase compleja es π\pi tienen un corte de rama en el plano complejo, lo que hace que el cálculo de la raíz principal alrededor de este corte esté sujeto a precisión / diferencias en la implementación de BLAS. Por ejemplo, la raíz cuadrada de Pauli Y puede devolver la rotación π/2\pi/2 o π/2-\pi/2 Y dependiendo de si el -1 eigenvalue se encuentra como complex(-1, tiny) o complex(-1, -tiny). Tales valores propios son realmente comunes en la información cuántica, por lo que esta función primero rota en fase la matriz de entrada para desplazar el corte de rama a un punto mucho menos común. Los problemas de precisión numérica subyacentes en torno al punto de corte de rama se mantienen, si un operador tiene un valor propio cercano a esta fase. La magnitud de esta rotación puede controlarse con el parámetro branch_cut_rotation .

La elección de branch_cut_rotation afecta a la raíz principal que se encuentra. Por ejemplo, la raíz cuadrada de ZGate se calculará como SGate o SdgGate dependiendo del sentido de la rotación:

from qiskit.circuit import library
from qiskit.quantum_info import Operator

z_op = Operator(library.ZGate())
assert z_op.power(0.5, branch_cut_rotation=1e-3) == Operator(library.SGate())
assert z_op.power(0.5, branch_cut_rotation=-1e-3) == Operator(library.SdgGate())

Parámetros

  • n (float) – el poder de elevar la matriz a.
  • branch_cut_rotation (float) – El ángulo de rotación a aplicar al corte de la rama en el plano complejo. Esto aleja el corte de la rama del punto común de 1-1, pero puede hacer que se seleccione una raíz diferente como raíz principal. La rotación es en sentido contrario a las agujas del reloj, siguiendo la convención estándar para la fase compleja.
  • assume_unitary (bool) – si True, se supone que el operador es unitario. En este caso, para potencias fraccionarias empleamos una implementación más rápida basada en la descomposición de Schur.

Devuelve

el operador resultante O ** n.

Tipo de retorno

Operador

Eleva

QiskitError - si las dimensiones de entrada y salida del operador no son iguales.

Nota

Sólo es seguro fijar el argumento assume_unitary en True cuando el operador es unitario (o, más generalmente, normal). De lo contrario, la función devolverá un resultado incorrecto.

reshape

reshape(input_dims=None, output_dims=None, num_qubits=None)

GitHub

Devuelve una copia superficial con las dimensiones de los subsistemas de entrada y salida remodeladas.

Parámetros

  • input_dims (None or tuple) – nuevas dimensiones de entrada del subsistema. Si es Ninguno, se conservarán las atenuaciones de entrada originales [Por defecto: Ninguno].
  • output_dims (None or tuple) – nuevas dimensiones de salida del subsistema. Si es Ninguno, se conservarán las atenuaciones de salida originales. [Predeterminado: Ninguno].
  • num_qubits (None or int) – remodelar a un operador N-qubit [Por defecto: Ninguno].

Devuelve

devuelve self con las dimensiones de entrada y salida reformadas.

Tipo de retorno

BaseOperator

Eleva

QiskitError - si el tamaño combinado de todas las dimensiones de entrada del subsistema o las dimensiones de salida del subsistema no es constante.

reverse_qargs

reverse_qargs()

GitHub

Devuelve un Operador con el orden de los subsistemas invertido.

Para un operador de producto tensorial, esto equivale a invertir el orden de los subsistemas del producto tensorial. Para un operador A=An1...A0A = A_{n-1} \otimes ... \otimes A_0 el operador devuelto será A0...An1A_0 \otimes ... \otimes A_{n-1}.

Devuelve

el operador con el orden de los subsistemas invertido.

Tipo de retorno

Operador

tensor

tensor(other)

GitHub

Devuelve el producto tensorial con otro Operador.

Parámetros

other (Operator) – un objeto Operador.

Devuelve

el producto tensorial aba \otimes b, donde aa

es el Operador actual, y bb es el otro Operador.

Tipo de retorno

Operador

Nota

El producto tensorial puede obtenerse utilizando el operador binario ^ . Por tanto, a.tensor(b) es equivalente a a ^ b.

to_instruction

to_instruction()

GitHub

Convertir a una instrucción UnitaryGate.

to_matrix

to_matrix()

GitHub

Convierte el operador a la matriz NumPy.

to_operator

to_operator()

GitHub

Convertir operador en clase de operador matricial

Tipo de retorno

Operador

transpose

transpose()

GitHub

Devuelve la transposición del Operador.

¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.