Statevector
class qiskit.quantum_info.Statevector(data, dims=None)
Bases: QuantumState, TolerancesMixin
Classe de vetor de estado
Inicializa um objeto statevector.
Parâmetros
- data (np.ndarray | list |Statevector |Operator |QuantumCircuit |circuit.instruction.Instruction) – Dados a partir dos quais o vetor de estado pode ser construído. Isso pode ser um vetor complexo, outro vetor de estado, um
Operatorcom apenas uma coluna ou umQuantumCircuitouInstruction. Se os dados forem um circuito ou uma instrução, o vetor de estado será construído presumindo-se que todos os qubits sejam inicializados no estado zero. - dims (int |tuple |list | None) – A dimensão do subsistema do estado (consulte informações adicionais).
Aumentos
QiskitError - se os dados de entrada não forem válidos.
Informações adicionais:
O dims kwarg pode ser None (Nenhum), um número inteiro ou um iterável de números inteiros.
Iterable- as dimensões do subsistema são os valores na lista com o número total de subsistemas dado pelo comprimento da lista.IntouNone– o comprimento do vetor de entrada especifica a dimensão total do estado. Se for uma potência de dois, o estado será inicializado como um estado de N qubits. Se não for uma potência de dois, o estado terá um único subsistema de dimensão d.
Atributos
atol
Valor Padrão: 1e-08
data
Dados de retorno.
dim
Retorna a dimensão total do estado.
num_qubits
Retorna o número de qubits se for um estado N-qubit ou None caso contrário.
rtol
Valor Padrão: 1e-05
settings
Configurações de retorno.
Métodos
conjugate
copy
dims
draw
draw(output=None, **drawer_args)
Retorna uma visualização do Statevector.
repr : ASCII TextMatrix do site __repr__ do estado.
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.
qsphere : Matplotlib figura, renderização do vetor de estado usando plot_state_qsphere().
hinton : Matplotlib figura, renderização do vetor de estado usando plot_state_hinton().
bloch : Matplotlib figura, renderização de statevector usando plot_bloch_multivector().
cidade : Matplotlib figura, renderização do vetor de estado usando plot_state_city().
paulivec : Matplotlib figura, renderização do vetor de estado usando plot_state_paulivec().
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, qsphere, hinton, bloch, city ou paulivec. O padrão é repr. O padrão pode ser alterado adicionando a linha
state_drawer = <default>a~/.qiskit/settings.confem[default]. - drawer_args - Argumentos a serem passados diretamente para a função de desenho ou construtor relevante ( TextMatrix( ), array_to_latex(), plot_state_qsphere(), plot_state_hinton() ou plot_bloch_multivector()). Consulte a função relevante em qiskit.visualization para obter a documentação da função.
Retorna
matplotlib.Figure ou str ou TextMatrix ou IPython.display.Latex: Desenho do vetor de estado.
Aumentos
ValueError - quando um método de saída inválido é selecionado.
Exemplos
Traçar um dos 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)
Retorna True se o outro for equivalente como um vetor de estado até a fase global.
Se other não for um Statevector, mas puder ser usado para inicializar um objeto statevector, isso verificará se Statevector(other) é equivalente ao statevector atual até a fase global.
Parâmetros
- other (Statevector) – um objeto a partir do qual um
Statevectorpode ser construído. - rtol (float) – valor de tolerância relativa para comparação.
- atol (float) – valor de tolerância absoluta para comparação.
Retorna
Verdadeiro se os vetores de estado forem equivalentes até a fase global.
Tipo de retorno
evolve
evolve(other, qargs=None)
Evolua um estado quântico por meio do operador.
Parâmetros
- other (Operator |QuantumCircuit |circuit.Instruction) – O operador para evoluir.
- qargs (list) – uma lista de posições do subsistema Statevector para aplicar o operador.
Retorna
o estado quântico de saída.
Tipo de retorno
Aumentos
QiskitError - se a dimensão do operador não corresponder às dimensões do subsistema do Statevector especificado.
expand
expand(other)
Retorna o estado do produto tensorial other ⊗ self.
Parâmetros
other (Statevector) – um objeto de estado quântico.
Retorna
o estado do produto tensorial other ⊗ self.
Tipo de retorno
Aumentos
QiskitError - se outro não for um estado quântico.
expectation_value
expectation_value(oper, qargs=None)
Calcule o valor de expectativa de um operador.
Parâmetros
- oper (Operator) – um operador para avaliar o expval de.
- qargs (None or list) – subsistemas aos quais aplicar o operador.
Retorna
o valor esperado.
Tipo de retorno
from_circuit
classmethod from_circuit(circuit, ignore_set_layout=False)
Crie um vetor de estado a partir de um circuito quântico.
Parâmetros
- circuit (QuantumCircuit) – Um circuito quântico
- ignore_set_layout (bool) – Quando definido como
True, se a entradacircuittiver um layout definido, ele será ignorado. Padrão paraFalse.
Retorna
O vetor de estado obtido pela aplicação do circuito no estado de entrada totalmente zero.
Tipo de retorno
Exemplo
Crie um vetor de estado a partir de um circuito transposto:
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)
Retorna o vetor de estado de saída de uma instrução.
O vetor de estado é inicializado no estado com o mesmo número de qubits que a instrução ou o circuito de entrada, evoluído pela instrução de entrada, e o vetor de estado de saída é retornado.
Parâmetros
instruction (qiskit.circuit.Instruction orQuantumCircuit) – instrução ou circuito
Retorna
O vetor de estado final.
Tipo de retorno
Aumentos
QiskitError - se a instrução contiver instruções inválidas para a simulação do vetor de estado.
from_int
static from_int(i, dims)
Retorna um vetor de estado da base computacional.
Parâmetros
- i (int) – o elemento de estado da base.
- dims (int ortuple orlist) – As dimensões do subsistema do vetor de estado (consulte informações adicionais).
Retorna
O estado da base computacional .
Tipo de retorno
Informações adicionais:
O dims kwarg pode ser um número inteiro ou um iterável de números inteiros.
Iterable- as dimensões do subsistema são os valores na lista com o número total de subsistemas dado pelo comprimento da lista.Int- o número inteiro especifica a dimensão total do estado. Se for uma potência de dois, o estado será inicializado como um estado N-qubit. Se não for uma potência de dois, o estado terá um único subsistema d-dimensional.
from_label
classmethod from_label(label)
Retorna um produto tensorial de estados próprios de Pauli X, Y, Z.
Rótulo | Statevector |
|---|---|
"0" | |
"1" | |
"+" | |
"-" | |
"r" | |
"l" |
Parâmetros
label (string) – um rótulo de cadeia de estados próprios (consulte a tabela para ver os valores permitidos).
Retorna
O vetor de estado da base de N qubits.
Tipo de retorno
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.
inner
inner(other)
Retorne o produto interno do eu e do outro como .
Parâmetros
other (Statevector) – um objeto de estado quântico.
Retorna
o produto interno do eu e do outro, .
Tipo de retorno
np.complex128
Aumentos
QiskitError - se o outro não for um estado quântico ou tiver uma dimensão diferente.
is_valid
is_valid(atol=None, rtol=None)
Retorna True se um vetor de estado tiver norma 1.
Parâmetros
Tipo de retorno
measure
measure(qargs=None)
Medir os subsistemas e retornar o resultado e o estado pós-medição.
Observe que essa função usa o gerador interno de números aleatórios do site QuantumStates para amostrar o resultado da medição. A semente do RNG pode ser definida usando o método seed() método.
Parâmetros
qargs (list or None) – subsistemas para os quais as medições de amostra devem ser feitas; se nenhum, a medição de amostra de todos os subsistemas (Padrão: Nenhum).
Retorna
o par (outcome, state) onde outcome é o
rótulo da cadeia de caracteres do resultado da medição, e state é o estado recolhido pós-medição do resultado correspondente.
Tipo de retorno
probabilities
probabilities(qargs=None, decimals=None)
Retorna o vetor de probabilidade de medição do subsistema.
As probabilidades de medição são relativas à medição na base de cálculo (diagonal).
Parâmetros
- qargs (None or list) – subsistemas para os quais retornar as probabilidades; se nenhum, retornar para todos os subsistemas (Padrão: nenhum).
- decimals (None or int) – o número de casas decimais para arredondar os valores. Se for None, nenhum arredondamento será feito (Padrão: None).
Retorna
A matriz de vetores Numpy de probabilidades.
Tipo de retorno
np.array
Exemplos
Considere um estado de produto 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]Também podemos permutar a ordem dos qubits na lista qargs para alterar a posição do qubit no resultado das 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)
Retorna o dicionário de probabilidade de medição do subsistema.
As probabilidades de medição são relativas à medição na base de cálculo (diagonal).
Essa representação de dicionário usa uma notação do tipo Ket, em que as chaves do dicionário são cadeias de caracteres qudit para os vetores de base do subsistema. Se algum subsistema tiver uma dimensão maior que 10, serão inseridos delimitadores de vírgula entre os números inteiros para que os subsistemas possam ser distinguidos.
Parâmetros
- qargs (None or list) – subsistemas para os quais retornar as probabilidades; se nenhum, retornar para todos os subsistemas (Padrão: nenhum).
- decimals (None or int) – o número de casas decimais para arredondar os valores. Se for None, nenhum arredondamento será feito (Padrão: None).
Retorna
As probabilidades de medição na forma dict (ket).
Tipo de retorno
purity
reset
reset(qargs=None)
Redefine o estado ou os subsistemas para o estado 0.
Parâmetros
qargs (list or None) – subsistemas a serem redefinidos; se None, todos os subsistemas serão redefinidos para o estado 0 (Padrão: None).
Retorna
o estado de reinicialização.
Tipo de retorno
Informações adicionais:
Se todos os subsistemas forem reiniciados, isso restaurará o estado inicial em todos os subsistemas. Se apenas alguns subsistemas forem reiniciados, esta função realizará uma medição nesses subsistemas e os atualizará de modo que os estados colapsados após a medição sejam levados ao estado 0. A semente do RNG para esta amostragem pode ser definida usando o seed() método.
reverse_qargs
reverse_qargs()
Retorna um Statevector com ordenação de subsistema invertida.
Para um estado de produto tensorial, isso é equivalente a inverter a ordem dos subsistemas de produto tensorial. Para um vetor de estado , o vetor de estado retornado será .
Retorna
o vetor de estado com ordem de subsistema invertida.
Tipo de retorno
sample_counts
sample_counts(shots, qargs=None)
Amostragem de um ditado de resultados de medição de qubit na base computacional.
Parâmetros
- shots (int) – número de amostras a serem geradas.
- qargs (None or list) – subsistemas para os quais as medições de amostra devem ser feitas; se nenhum, a medição de amostra de todos os subsistemas (Padrão: Nenhum).
Retorna
dicionário de contagens amostradas.
Tipo de retorno
Mais informações:
Esta função amostra os resultados da medição usando a medida
probabilities()para o estado atual e qargs. Na verdade, ele não implementa a medição, portanto, o estado atual não é modificado.A semente do gerador de números aleatórios utilizada para a amostragem pode ser definida como um valor fixo por meio do método
seed()state.
sample_memory
sample_memory(shots, qargs=None)
Amostra de uma lista de resultados de medição de qubit na base computacional.
Parâmetros
- shots (int) – número de amostras a serem geradas.
- qargs (None or list) – subsistemas para os quais as medições de amostra devem ser feitas; se nenhum, a medição de amostra de todos os subsistemas (Padrão: Nenhum).
Retorna
lista das contagens amostradas na ordem em que foram amostradas.
Tipo de retorno
np.array
Mais informações:
Esta função amostra os resultados da medição usando a medida
probabilities()para o estado atual e qargs. Na verdade, ele não implementa a medição, portanto, o estado atual não é modificado.A semente do gerador de números aleatórios utilizada para a amostragem pode ser definida como um valor fixo por meio do método
seed()state.
seed
tensor
tensor(other)
Retorna o estado do produto tensorial self ⊗ other.
Parâmetros
other (Statevector) – um objeto de estado quântico.
Retorna
o operador de produto tensorial self ⊗ other.
Tipo de retorno
Aumentos
QiskitError - se outro não for um estado quântico.
to_dict
to_dict(decimals=None)
Converte o vetor de estado para o formato de dicionário.
Essa representação de dicionário usa uma notação do tipo Ket, em que as chaves do dicionário são cadeias de caracteres qudit para os vetores de base do subsistema. Se algum subsistema tiver uma dimensão maior que 10, serão inseridos delimitadores de vírgula entre os números inteiros para que os subsistemas possam ser distinguidos.
Parâmetros
decimals (None or int) – o número de casas decimais para arredondar os valores. Se for None, nenhum arredondamento será feito (Padrão: None).
Retorna
o formato de dicionário do vetor de estado.
Tipo de retorno
Exemplo
A forma ket de um vetor 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 subsistemas sem qubit, o intervalo de números inteiros pode ir de 0 a 9. Por exemplo, em um 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 dimensões do subsistema, são necessários delimitadores. O exemplo a seguir é para um sistema de 20 dimensões que consiste em um qubit e um qudit de 10 dimensões.
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)}