Skip to main content
IBM Quantum Platform

Operatore

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

GitHub

Basi: LinearOp

Classe dell'operatore di matrice

Rappresenta un operatore matriciale MM che evolve() a Statevector ψ|\psi\rangle per moltiplicazione matrice-vettore

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

e sarà evolve() a DensityMatrix ρ\rho per moltiplicazione destra e sinistra

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

Ad esempio, il seguente operatore M=XM = X applicato allo stato zero ψ=0(ρ=00)|\psi\rangle=|0\rangle (\rho = |0\rangle\langle 0|) lo trasforma nello stato 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,))

Inizializza un oggetto operatore.

Parametri

  • data (QuantumCircuit |Operation | BaseOperator | np.ndarray) – dati per l'inizializzazione dell'operatore.
  • input_dims (tuple | None) – le dimensioni del sottosistema di ingresso.
  • output_dims (tuple | None) – le dimensioni del sottosistema di uscita.

Aumenti

QiskitError – se i dati di input non possono essere inizializzati come operatore.

Ulteriori informazioni:

Se le dimensioni di ingresso o di uscita sono Nessuna, vengono determinate automaticamente dai dati di ingresso. Se i dati di input sono una matrice Numpy di forma ( 2**N, 2**N ) verranno utilizzati sistemi di qubit. Se l'operatore di input non è un operatore N-qubit, assegnerà un singolo sottosistema con dimensione specificata dalla forma dell'input. Si noti che due operatori inizializzati con questo metodo sono considerati equivalenti solo se corrispondono al loro ordine canonico dei qubit (o: permutazione). Vedere Operator.from_circuit() per specificare una diversa permutazione dei qubit.


Attributi

atol

Valore predefinito: 1e-08

data

L'array Numpy sottostante.

dim

Restituisce una tupla (forma_ingresso, forma_uscita).

num_qubits

Restituisce il numero di qubit se si tratta di un operatore a N qubit o altrimenti None.

qargs

Restituisce i qarg per l'operatore.

rtol

Valore predefinito: 1e-05

settings

Restituire le impostazioni dell'operatore.


Metodi

adjoint

adjoint()

GitHub

Restituisce l'adjoint dell'Operatore.

Tipo di restituzione

apply_permutation

apply_permutation(perm, front=False)

GitHub

Modifica i dati dell'operatore componendoli con una permutazione.

Parametri

  • perm (list) – schema di permutazione, che descrive quali qubit occupano le posizioni 0, 1, 2, ecc. dopo l'applicazione della permutazione.
  • front (bool) – Se impostato su True , la permutazione viene applicata prima dell'operatore, se impostato su False , la permutazione viene applicata dopo l'operatore.

Risultati

L'operatore modificato.

Tipo di restituzione

Operatore

Aumenti

QiskitError – se la dimensione dello schema di permutazione non corrisponde alle dimensioni dell'operatore.

compose

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

GitHub

Restituisce la composizione dell'operatore con un altro Operatore.

Parametri

  • other (Operator) – un oggetto Operatore.
  • qargs (list or None) – un elenco delle posizioni dei sottosistemi su cui applicare altre operazioni. Se "None" si applica a tutti i sottosistemi (impostazione predefinita: None).
  • front (bool) – Se True, componi utilizzando la moltiplicazione dell'operatore a destra, invece della moltiplicazione a sinistra, [impostazione predefinita: False].

Risultati

L'operatore composto.

Tipo di restituzione

Operatore

Aumenti

QiskitError – se l’altro non può essere convertito in un operatore o presenta dimensioni incompatibili con i sottosistemi specificati.

Nota

La composizione (&) per default è definita come moltiplicazione matriciale sinistra per gli operatori matriciali, mentre @ (equivalente a dot()) è definita come moltiplicazione matriciale destra. Cioè A & B == A.compose(B) è equivalente a B @ A == B.dot(A) quando A e B sono dello stesso tipo.

Impostando il kwarg front=True si passa alla moltiplicazione matriciale destra ed è equivalente al metodo dot()A.dot(B) == A.compose(B, front=True) .

conjugate

conjugate()

GitHub

Restituisce il coniugato dell'operatore.

copy

copy()

GitHub

Eseguire una copia profonda dell'operatore corrente.

dot

dot(other, qargs=None)

GitHub

Restituisce l'operatore moltiplicato a destra self * altro.

Parametri

  • other (Operator) – un oggetto operatore.
  • qargs (list or None) – un elenco delle posizioni dei sottosistemi su cui applicare altre operazioni. Se "None" si applica a tutti i sottosistemi (impostazione predefinita: None).

Risultati

La matrice destra moltiplicata Operatore.

Tipo di restituzione

Operatore

Nota

Il prodotto di punti può essere ottenuto utilizzando l'operatore binario @ . Quindi a.dot(b) è equivalente a a @ b.

draw

draw(output=None, **drawer_args)

GitHub

Restituisce una visualizzazione dell'Operatore.

repr : Stringa dello Stato __repr__.

testo : ASCII TextMatrix che può essere stampato nella console.

latex : Un oggetto IPython Latex da visualizzare in Jupyter Notebook.

latex_source : Sorgente ASCII grezzo e non compilato per generare l'array usando LaTeX.

Parametri

  • output (str) – Selezionare il metodo di output da utilizzare per disegnare lo stato. Le scelte valide sono repr, text, latex, latex_source, l'impostazione predefinita è repr.
  • drawer_args - Argomenti da passare direttamente alla funzione o al costruttore di disegno pertinente ( TextMatrix( ), array_to_latex()). Per la documentazione della funzione in questione, vedere la funzione corrispondente in qiskit.visualization.

Risultati

Disegno dell'operatore.

Tipo di restituzione

str o TextMatrix o IPython.display.Latex

Aumenti

  • ValueError - quando viene selezionato un metodo di uscita non valido.
  • MissingOptionalLibrary - Se SymPy non è installato e 'latex' o 'latex_source' sono selezionati per output.

equiv

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

GitHub

Restituisce True se gli operatori sono equivalenti fino alla fase globale.

Parametri

  • other (Operator) – un oggetto operatore.
  • rtol (float) – valore di tolleranza relativa per il confronto.
  • atol (float) – valore di tolleranza assoluta per il confronto.

Risultati

Vero se gli operatori sono equivalenti fino alla fase globale.

Tipo di restituzione

bool

expand

expand(other)

GitHub

Restituisce il prodotto tensoriale di ordine inverso con un altro Operatore.

Parametri

other (Operator) – un oggetto Operatore.

Risultati

il prodotto tensoriale bab \otimes a, dove aa

è l'Operatore corrente e bb è l'altro Operatore.

Tipo di restituzione

Operatore

from_circuit

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

GitHub

Crea un nuovo oggetto Operator a partire da un QuantumCircuit

OperatorSebbene un QuantumCircuit oggetto possa essere passato direttamente come parametro data al costruttore della classe, ciò non offre alcuna possibilità di scegliere come utilizzare il circuito per creare un oggetto. Questo metodo costruttore consente di controllare le modalità di creazione dell'oggetto Operator , in modo da poterlo adattare a un caso d'uso specifico.

Per impostazione predefinita, questo metodo del costruttore permuta i qubit in base a una disposizione iniziale configurata (cioè dopo la trasposizione). Fornisce anche un'opzione per fornire manualmente un oggetto Layout direttamente.

Parametri

  • circuit (QuantumCircuit) – Da cui QuantumCircuit creare un oggetto Operator.
  • ignore_set_layout (bool) – Se impostato su True , se l'ingresso circuit ha un layout impostato, questo verrà ignorato
  • layout (Layout) – Se specificato, questo kwarg può essere usato per specificare un particolare layout da usare per permutare i qubit nel file creato Operator. Se viene specificato, verrà utilizzato al posto di un layout contenuto nell'input circuit . Se specificato, i bit virtuali nel campo Layout devono essere presenti nell'ingresso circuit .
  • final_layout (Layout) – Se specificato, questo kwarg può essere usato per rappresentare la permutazione dell'uscita causata dagli inserimenti di swap durante la fase di instradamento del transpiler.

Risultati

Un operatore che rappresenta il circuito di ingresso

Tipo di restituzione

Operatore

from_label

classmethod from_label(label)

GitHub

Restituisce un prodotto tensoriale di operatori single-qubit.

Parametri

label (string) – stringa di operatori a singolo qubit.

Risultati

L'operatore N-qubit.

Tipo di restituzione

Operatore

Aumenti

QiskitError – se l'etichetta contiene caratteri non validi oppure se la lunghezza dell'etichetta è superiore a un numero di qubit specificato esplicitamente (num_qubits).

Ulteriori informazioni:

Le etichette corrispondono alle matrici a qubit singolo: '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

Restituisce una tupla di dimensioni di ingresso per i sottosistemi specificati.

is_unitary

is_unitary(atol=None, rtol=None)

GitHub

Restituisce True se l'operatore è una matrice unitaria.

output_dims

output_dims(qargs=None)

GitHub

Restituisce una tupla di dimensioni di uscita per i sottosistemi specificati.

power

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

GitHub

Restituisce la potenza della matrice dell'operatore.

Le potenze non intere di operatori con un autovalore la cui fase complessa è π\pi hanno un taglio di ramo nel piano complesso, che rende il calcolo della radice principale intorno a questo taglio soggetto a precisione / differenze nell'implementazione BLAS. Ad esempio, la radice quadrata di Pauli Y può restituire la rotazione π/2\pi/2 o π/2-\pi/2 Y a seconda che l'autovalore -1 sia trovato come complex(-1, tiny) o complex(-1, -tiny). Tali autovalori sono molto comuni nell'informazione quantistica, quindi questa funzione prima ruota in fase la matrice di ingresso per spostare il taglio del ramo in un punto molto meno comune. I problemi di precisione numerica intorno al punto di divisione rimangono, se un operatore ha un autovalore vicino a questa fase. L'entità di questa rotazione può essere controllata con il parametro branch_cut_rotation .

La scelta di branch_cut_rotation influisce sulla radice principale che viene trovata. Ad esempio, la radice quadrata di ZGate sarà calcolata come SGate o SdgGate a seconda del modo in cui viene eseguita la rotazione:

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())

Parametri

  • n (float) – il potere di elevare la matrice a.
  • branch_cut_rotation (float) – L'angolo di rotazione da applicare al taglio del ramo nel piano complesso. Questo sposta il taglio del ramo lontano dal punto comune di 1-1, ma può far sì che venga selezionata una radice diversa come radice principale. La rotazione è in senso antiorario, secondo la convenzione standard per la fase complessa.
  • assume_unitary (bool) – se True, si assume che l'operatore sia unitario. In questo caso, per le potenze frazionarie utilizziamo un'implementazione più rapida basata sulla decomposizione di Schur.

Risultati

l'operatore risultante O ** n.

Tipo di restituzione

Operatore

Aumenti

QiskitError – se le dimensioni di ingresso e di uscita dell'operatore non sono uguali.

Nota

È sicuro impostare l'argomento assume_unitary a True solo quando l'operatore è unitario (o, più in generale, normale). In caso contrario, la funzione restituirà un risultato errato.

reshape

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

GitHub

Restituisce una copia superficiale con le dimensioni dei sottosistemi di ingresso e di uscita rimodellate.

Parametri

  • input_dims (None or tuple) – nuove dimensioni di input del sottosistema. Se Nessuno, le attenuazioni dell'input originale verranno mantenute. [Predefinito: Nessuno].
  • output_dims (None or tuple) – nuove dimensioni di uscita del sottosistema. Se Nessuno, le gradazioni di output originali verranno mantenute. [Predefinito: Nessuno].
  • num_qubits (None or int) – rimodella in un operatore N-qubit [Predefinito: Nessuno].

Risultati

restituisce self con le dimensioni di ingresso e di uscita rimodellate.

Tipo di restituzione

BaseOperator

Aumenti

QiskitError – se la somma delle dimensioni di ingresso o di uscita di tutti i sottosistemi non è costante.

reverse_qargs

reverse_qargs()

GitHub

Restituisce un Operatore con l'ordinamento dei sottosistemi invertito.

Per un operatore di prodotto tensoriale ciò equivale a invertire l'ordine dei sottosistemi del prodotto tensoriale. Per un operatore A=An1...A0A = A_{n-1} \otimes ... \otimes A_0 l'operatore restituito sarà A0...An1A_0 \otimes ... \otimes A_{n-1}.

Risultati

l'operatore con l'ordine dei sottosistemi invertito.

Tipo di restituzione

Operatore

tensor

tensor(other)

GitHub

Restituisce il prodotto tensoriale con un altro Operatore.

Parametri

other (Operator) – un oggetto Operatore.

Risultati

il prodotto tensoriale aba \otimes b, dove aa

è l'Operatore corrente e bb è l'altro Operatore.

Tipo di restituzione

Operatore

Nota

Il prodotto tensoriale può essere ottenuto utilizzando l'operatore binario ^ . Quindi a.tensor(b) è equivalente a a ^ b.

to_instruction

to_instruction()

GitHub

Convertire in un'istruzione UnitaryGate.

to_matrix

to_matrix()

GitHub

Converte l'operatore in matrice NumPy.

to_operator

to_operator()

GitHub

Convertire l'operatore in classe di operatori matriciali

Tipo di restituzione

Operatore

transpose

transpose()

GitHub

Restituisce la trasposizione dell'Operatore.

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.