Skip to main content
IBM Quantum Platform

Operador

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

GitHub

Bases: LinearOp

Classe de operador de matriz

Isso representa um operador de matriz MM que irá evolve() a Statevector ψ|\psi\rangle por multiplicação matriz-vetor

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

e vontade evolve() a DensityMatrix ρ\rho por multiplicação à esquerda e à direita

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

Por exemplo, o seguinte operador M=XM = X aplicado ao estado zero ψ=0(ρ=00)|\psi\rangle=|0\rangle (\rho = |0\rangle\langle 0|) o altera para o estado um ψ=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,))

Inicializa um objeto operador.

Parâmetros

  • data (QuantumCircuit |Operation | BaseOperator | np.ndarray) – dados para inicializar o operador.
  • input_dims (tuple | None) – as dimensões do subsistema de entrada.
  • output_dims (tuple | None) – as dimensões do subsistema de saída.

Aumentos

QiskitError - se os dados de entrada não puderem ser inicializados como um operador.

Informações adicionais:

Se as dimensões de entrada ou saída forem Nenhuma, elas serão determinadas automaticamente a partir dos dados de entrada. Se os dados de entrada forem uma matriz Numpy de formato ( 2**N, 2**N ), serão usados sistemas de qubit. Se o operador de entrada não for um operador N-qubit, ele atribuirá um único subsistema com dimensão especificada pela forma da entrada. Observe que dois operadores inicializados por esse método só são considerados equivalentes se corresponderem à ordem canônica do qubit (ou permutação). Veja Operator.from_circuit() para especificar uma permutação de qubit diferente.


Atributos

atol

Valor Padrão: 1e-08

data

A matriz Numpy subjacente.

dim

Retorna uma tupla (input_shape, output_shape).

num_qubits

Retorna o número de qubits se for um operador N-qubit ou None caso contrário.

qargs

Retorna os qargs do operador.

rtol

Valor Padrão: 1e-05

settings

Retornar as configurações do operador.


Métodos

adjoint

adjoint()

GitHub

Retorna o adjunto do Operador.

Tipo de retorno

Eu

apply_permutation

apply_permutation(perm, front=False)

GitHub

Modifica os dados do operador, compondo-os com uma permutação.

Parâmetros

  • perm (list) – padrão de permutação, descrevendo quais qubits ocupam as posições 0, 1, 2, etc. após a aplicação da permutação.
  • front (bool) – Quando definido como True , a permutação é aplicada antes do operador; quando definido como False , a permutação é aplicada após o operador.

Retorna

O operador modificado.

Tipo de retorno

Operador

Aumentos

QiskitError - se o tamanho do padrão de permutação não corresponder às dimensões do operador.

compose

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

GitHub

Retorna a composição do operador com outro operador.

Parâmetros

  • other (Operator) – um objeto Operator.
  • qargs (list or None) – uma lista de posições do subsistema às quais aplicar outras. Se None for aplicado a todos os subsistemas (padrão: None).
  • front (bool) – Se True, compor usando o operador multiplicação à direita, em vez de multiplicação à esquerda [, padrão: False].

Retorna

O operador composto.

Tipo de retorno

Operador

Aumentos

QiskitError - se outro não puder ser convertido em um operador ou tiver dimensões incompatíveis para os subsistemas especificados.

Nota

Por padrão, a composição (&) é definida como multiplicação de matriz à esquerda para operadores de matriz, enquanto @ (equivalente a dot()) é definida como multiplicação de matriz à direita. Ou seja, A & B == A.compose(B) é equivalente a B @ A == B.dot(A) quando A e B são do mesmo tipo.

A configuração do kwarg front=True muda isso para multiplicação de matriz à direita e é equivalente ao método dot() método A.dot(B) == A.compose(B, front=True).

conjugate

conjugate()

GitHub

Retorna o conjugado do Operador.

copy

copy()

GitHub

Faça uma cópia profunda do operador atual.

dot

dot(other, qargs=None)

GitHub

Retorna o operador multiplicado à direita self * other.

Parâmetros

  • other (Operator) – um objeto operador.
  • qargs (list or None) – uma lista de posições do subsistema às quais aplicar outras. Se None for aplicado a todos os subsistemas (padrão: None).

Retorna

A matriz correta multiplicou o Operator.

Tipo de retorno

Operador

Nota

O produto escalar pode ser obtido usando o operador binário @ . Portanto, a.dot(b) é equivalente a a @ b.

draw

draw(output=None, **drawer_args)

GitHub

Retorna uma visualização do Operador.

repr : String of the state's __repr__.

text : ASCII TextMatrix que pode ser impresso no console.

latex : Um objeto IPython Latex para exibição em Jupyter Notebooks.

latex_source : Fonte ASCII bruta e não compilada para gerar uma matriz usando LaTeX.

Parâmetros

  • output (str) – Selecione o método de saída a ser usado para desenhar o estado. As opções válidas são repr, text, latex, latex_source, o padrão é repr.
  • drawer_args - Argumentos a serem passados diretamente para a função de desenho ou construtor relevante ( TextMatrix( ), array_to_latex()). Consulte a função relevante em qiskit.visualization para obter a documentação da função.

Retorna

Desenho do Operador.

Tipo de retorno

str ou TextMatrix ou IPython.display.Latex

Aumentos

  • ValueError - quando um método de saída inválido é selecionado.
  • MissingOptionalLibrary - Se o site SymPy não estiver instalado e 'latex' ou 'latex_source' for selecionado para output.

equiv

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

GitHub

Retorna True se os operadores forem equivalentes até a fase global.

Parâmetros

  • other (Operator) – um objeto operador.
  • rtol (float) – valor de tolerância relativa para comparação.
  • atol (float) – valor de tolerância absoluta para comparação.

Retorna

Verdadeiro se os operadores forem equivalentes até a fase global.

Tipo de retorno

bool

expand

expand(other)

GitHub

Retorna o produto tensorial de ordem inversa com outro Operator.

Parâmetros

other (Operator) – um objeto Operator.

Retorna

o produto tensorial bab \otimes a, onde aa

é o Operador atual, e bb é o outro Operador.

Tipo de retorno

Operador

from_circuit

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

GitHub

Crie um novo objeto Operator a partir de um objeto QuantumCircuit

Embora um objeto QuantumCircuit possa ser passado diretamente como data para o construtor da classe, isso não oferece opções sobre como o circuito é usado para criar um objeto Operator. Esse método construtor permite que você controle como o Operator é criado para que possa ser ajustado para um caso de uso específico.

Por padrão, esse método construtor permutará os qubits com base em um layout inicial configurado (ou seja, depois de ter sido transpilado). Ele também oferece uma opção para fornecer manualmente um objeto Layout diretamente.

Parâmetros

  • circuit (QuantumCircuit) – O QuantumCircuit para criar um objeto Operator.
  • ignore_set_layout (bool) – Quando definido como True , se a entrada circuit tiver um layout definido, ele será ignorado
  • layout (Layout) – Se especificado, esse kwarg pode ser usado para especificar um layout específico a ser usado para permutar os qubits no Operator. Se isso for especificado, será usado em vez de um layout contido na entrada circuit . Se especificado, os bits virtuais no Layout devem estar presentes na entrada circuit .
  • final_layout (Layout) – Se especificado, esse kwarg pode ser usado para representar a permutação de saída causada por inserções de swap durante o estágio de roteamento do transpilador.

Retorna

Um operador que representa o circuito de entrada

Tipo de retorno

Operador

from_label

classmethod from_label(label)

GitHub

Retorna um produto tensorial de operadores de um único qubit.

Parâmetros

label (string) – cadeia de operadores de um único qubit.

Retorna

O operador N-qubit.

Tipo de retorno

Operador

Aumentos

QiskitError - se o rótulo contiver caracteres inválidos ou se o comprimento do rótulo for maior do que um número_qubits explicitamente especificado.

Informações adicionais:

Os rótulos correspondem às matrizes de qubit único: '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] ] '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

Retorna uma tupla de dimensão de entrada para os subsistemas especificados.

is_unitary

is_unitary(atol=None, rtol=None)

GitHub

Retorna True se o operador for uma matriz unitária.

output_dims

output_dims(qargs=None)

GitHub

Retorna uma tupla de dimensão de saída para os subsistemas especificados.

power

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

GitHub

Retorna a potência da matriz do operador.

Potências não inteiras de operadores com um valor próprio cuja fase complexa é π\pi têm um corte de ramo no plano complexo, o que torna o cálculo da raiz principal em torno desse corte sujeito a precisão/diferenças na implementação do BLAS. Por exemplo, a raiz quadrada de Pauli Y pode retornar a rotação π/2\pi/2 ou π/2-\pi/2 Y, dependendo do fato de o valor próprio -1 ser encontrado como complex(-1, tiny) ou complex(-1, -tiny). Esses valores próprios são realmente comuns em informações quânticas, portanto, essa função primeiro gira a matriz de entrada para deslocar o corte de ramo para um ponto muito menos comum. Os problemas subjacentes de precisão numérica em torno do ponto de corte de ramificação permanecem, se um operador tiver um valor próprio próximo a essa fase. A magnitude dessa rotação pode ser controlada com o parâmetro branch_cut_rotation .

A escolha do site branch_cut_rotation afeta a raiz principal que é encontrada. Por exemplo, a raiz quadrada de ZGate será calculada como SGate ou SdgGate dependendo do sentido em que a rotação for feita:

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) – o poder de elevar a matriz para.
  • branch_cut_rotation (float) – O ângulo de rotação a ser aplicado ao corte do ramo no plano complexo. Isso afasta o corte do ramo do ponto comum de 1-1, mas pode fazer com que uma raiz diferente seja selecionada como a raiz principal. A rotação é no sentido anti-horário, seguindo a convenção padrão para a fase complexa.
  • assume_unitary (bool) – se True, presume-se que o operador seja unitário. Nesse caso, para potências fracionárias, empregamos uma implementação mais rápida com base na decomposição de Schur.

Retorna

o operador resultante O ** n.

Tipo de retorno

Operador

Aumentos

QiskitError - se as dimensões de entrada e saída do operador não forem iguais.

Nota

Só é seguro definir o argumento assume_unitary como True quando o operador for unitário (ou, de forma mais geral, normal). Caso contrário, a função retornará um resultado incorreto.

reshape

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

GitHub

Retorna uma cópia superficial com dimensões reformuladas do subsistema de entrada e saída.

Parâmetros

  • input_dims (None or tuple) – novas dimensões de entrada do subsistema. Se for None (Nenhum), as dimensões de entrada originais serão preservadas [Padrão: Nenhum].
  • output_dims (None or tuple) – novas dimensões de saída do subsistema. Se for None (Nenhum), os dims de saída originais serão preservados [Padrão: Nenhum].
  • num_qubits (None or int) – remodelar para um operador N-qubit [Padrão: Nenhum].

Retorna

retorna self com dimensões de entrada e saída remodeladas.

Tipo de retorno

BaseOperator

Aumentos

QiskitError - se o tamanho combinado de todas as dimensões de entrada do subsistema ou de saída do subsistema não for constante.

reverse_qargs

reverse_qargs()

GitHub

Retorna um Operator com ordenação de subsistema invertida.

Para um operador de produto tensorial, isso é equivalente a inverter a ordem dos subsistemas de produto tensorial. Para um operador A=An1...A0A = A_{n-1} \otimes ... \otimes A_0, o operador retornado será A0...An1A_0 \otimes ... \otimes A_{n-1}.

Retorna

o operador com a ordem do subsistema invertida.

Tipo de retorno

Operador

tensor

tensor(other)

GitHub

Retorna o produto tensorial com outro Operator.

Parâmetros

other (Operator) – um objeto Operator.

Retorna

o produto tensorial aba \otimes b, onde aa

é o Operador atual, e bb é o outro Operador.

Tipo de retorno

Operador

Nota

O produto tensor pode ser obtido usando o operador binário ^ . Portanto, a.tensor(b) é equivalente a a ^ b.

to_instruction

to_instruction()

GitHub

Converter em uma instrução UnitaryGate.

to_matrix

to_matrix()

GitHub

Converta o operador para a matriz NumPy.

to_operator

to_operator()

GitHub

Converter operador em classe de operador de matriz

Tipo de retorno

Operador

transpose

transpose()

GitHub

Retorna a transposição do Operador.

Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.