Skip to main content
IBM Quantum Platform
  • O código desta página foi desenvolvido usando os seguintes requisitos. Recomendamos o uso dessas versões ou de versões mais recentes.

    qiskit[all]~=2.5.0
    

Ordenação de bits no Qiskit SDK

Se você tiver um conjunto de nn bits (ou qubits), geralmente rotulará cada bit como 0n10 \rightarrow n-1. Diferentes softwares e recursos devem escolher como ordenar esses bits esses bits na memória do computador e quando exibidos na tela.


Convenções Qiskit

Veja como o Qiskit SDK ordena os bits em diferentes cenários.

Circuitos quânticos

A classe QuantumCircuit armazena seus qubits em uma lista (QuantumCircuit.qubits). O índice de um qubit nessa lista define o rótulo do o rótulo do qubit.

from qiskit import QuantumCircuit, QuantumRegister
from qiskit.circuit import Qubit

qc = QuantumCircuit(2)
qc.qubits[0]  # qubit "0"

Qubit(QuantumRegister(2, "q"), 0)

Output:

<Qubit register=(2, "q"), index=0>

Diagramas de circuitos

Em um diagrama de circuito, o qubit 00 é o qubit mais alto e o qubit n1n-1 é o qubit mais baixo o qubit mais baixo. Você pode alterar isso com o argumento reverse_bits de QuantumCircuit.draw (consulte Alterar a ordem no Qiskit ).

qc.x(1)
qc.draw()

Output:

          
q_0: ─────
     ┌───┐
q_1: ┤ X ├
     └───┘

Números Inteiros

Ao interpretar os bits como um número, o bit 00 é o bit menos significativo e o o bit n1n-1 é o mais significativo. Isso é útil na codificação porque cada bit tem o valor o valor 2label2^\text{label} (o rótulo é o índice do qubit em QuantumCircuit.qubits). Por exemplo, a execução do circuito a seguir termina com o bit 00 sendo 0, e o bit 11 sendo 1. Isso é interpretado como o número inteiro decimal 2 (medido com probabilidade 1.0).

from qiskit.primitives import StatevectorSampler as Sampler

qc.measure_all()

job = Sampler().run([qc])
result = job.result()
print(f" > Counts: {result[0].data.meas.get_counts()}")

Output:

 > Counts: {'10': 1024}

Sequências

Ao exibir ou interpretar uma lista de bits (ou qubits) como uma cadeia de caracteres, o bit n1n-1 é o bit mais à esquerda e o bit 00 é o bit mais à direita. Isso ocorre porque normalmente escrevemos números com o dígito mais significativo à esquerda, e no Qiskit, o bit n1n-1 é interpretado como o bit mais significativo.

Por exemplo, a célula a seguir define um Statevector a partir de uma sequência de estados de um único qubit. Nesse caso, o qubit 00 está no estado +|+\rangle, e o o qubit 11 no estado 0|0\rangle.

from qiskit.quantum_info import Statevector

sv = Statevector.from_label("0+")
sv.probabilities_dict()

Output:

{np.str_('00'): np.float64(0.4999999999999999),
 np.str_('01'): np.float64(0.4999999999999999)}

Isso ocasionalmente causa confusão ao interpretar uma sequência de bits, pois você poderia esperar que o bit mais à esquerda fosse o bit 00, enquanto ele normalmente representa o bit n1n-1.

Matrizes vetoriais de estado

Ao representar um vetor de estado como uma lista de números complexos (amplitudes), Qiskit ordena essas amplitudes de modo que a amplitude no índice xx represente o estado da base computacional x|x\rangle.

print(sv[1])  # amplitude of state |01>
print(sv[2])  # amplitude of state |10>

Output:

(0.7071067811865475+0j)
0j

Portas

Cada porta no Qiskit pode interpretar uma lista de qubits de sua própria maneira, mas as as portas controladas geralmente seguem a convenção (control, target).

Por exemplo, a célula a seguir adiciona uma porta X controlada em que o qubit 00 é o controle e o qubit é o destino o controle e o qubit 11 é o alvo.

from qiskit import QuantumCircuit

qc = QuantumCircuit(2)
qc.cx(0, 1)
qc.draw()

Output:

          
q_0: ──■──
     ┌─┴─┐
q_1: ┤ X ├
     └───┘

Seguindo todas as convenções mencionadas anteriormente no Qiskit, esse CX-gate realiza a transformação 0111|01\rangle \leftrightarrow |11\rangle, portanto, tem a matriz a seguir.

(1000000100100100)\begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 \\ \end{pmatrix}

Alterar a ordem no Qiskit

Para desenhar um circuito com qubits na ordem inversa (ou seja, o qubit 00 na parte inferior), use o argumento reverse_bits . Isso afeta apenas o diagrama gerado e não afeta o circuito e não afeta o circuito; o X-gate ainda atua no qubit 00.

from qiskit import QuantumCircuit

qc = QuantumCircuit(2)
qc.x(0)
qc.draw(reverse_bits=True)

Output:

          
q_1: ─────
     ┌───┐
q_0: ┤ X ├
     └───┘

Você pode usar o método reverse_bits para retornar um novo circuito com os rótulos dos rótulos dos qubits invertidos (isso não altera o circuito original).

qc.reverse_bits().draw()

Output:

          
q_0: ─────
     ┌───┐
q_1: ┤ X ├
     └───┘

Observe que, nesse novo circuito, o X-gate atua no qubit 11.


Próximas etapas

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