Operatore
class qiskit.quantum_info.Operator(data, input_dims=None, output_dims=None)
Basi: LinearOp
Classe dell'operatore di matrice
Rappresenta un operatore matriciale che evolve() a Statevector per moltiplicazione matrice-vettore
e sarà evolve() a DensityMatrix per moltiplicazione destra e sinistra
Ad esempio, il seguente operatore applicato allo stato zero lo trasforma nello stato uno :
>>> 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
apply_permutation
apply_permutation(perm, front=False)
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 suFalse, la permutazione viene applicata dopo l'operatore.
Risultati
L'operatore modificato.
Tipo di restituzione
Aumenti
QiskitError – se la dimensione dello schema di permutazione non corrisponde alle dimensioni dell'operatore.
compose
compose(other, qargs=None, front=False)
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
Aumenti
QiskitError – se l’altro non può essere convertito in un operatore o presenta dimensioni incompatibili con i sottosistemi specificati.
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
copy
dot
dot(other, qargs=None)
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
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)
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 peroutput.
equiv
equiv(other, rtol=None, atol=None)
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
expand
expand(other)
Restituisce il prodotto tensoriale di ordine inverso con un altro Operatore.
Parametri
other (Operator) – un oggetto Operatore.
Risultati
il prodotto tensoriale , dove
è l'Operatore corrente e è l'altro Operatore.
Tipo di restituzione
from_circuit
classmethod from_circuit(circuit, ignore_set_layout=False, layout=None, final_layout=None)
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
QuantumCircuitcreare un oggetto Operator. - ignore_set_layout (bool) – Se impostato su
True, se l'ingressocircuitha 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'inputcircuit. Se specificato, i bit virtuali nel campoLayoutdevono essere presenti nell'ingressocircuit. - 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
from_label
classmethod from_label(label)
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
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)
Restituisce una tupla di dimensioni di ingresso per i sottosistemi specificati.
is_unitary
output_dims
output_dims(qargs=None)
Restituisce una tupla di dimensioni di uscita per i sottosistemi specificati.
power
power(n, branch_cut_rotation=3.141592653589793e-12, assume_unitary=False)
Restituisce la potenza della matrice dell'operatore.
Le potenze non intere di operatori con un autovalore la cui fase complessa è 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 o 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 , 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
Aumenti
QiskitError – se le dimensioni di ingresso e di uscita dell'operatore non sono uguali.
È 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)
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()
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 l'operatore restituito sarà .
Risultati
l'operatore con l'ordine dei sottosistemi invertito.
Tipo di restituzione
tensor
tensor(other)
Restituisce il prodotto tensoriale con un altro Operatore.
Parametri
other (Operator) – un oggetto Operatore.
Risultati
il prodotto tensoriale , dove
è l'Operatore corrente e è l'altro Operatore.
Tipo di restituzione
Il prodotto tensoriale può essere ottenuto utilizzando l'operatore binario ^ . Quindi a.tensor(b) è equivalente a a ^ b.