Qiskit SDKにおけるビット順序
パッケージバージョン
このページのコードは、以下の要件を使用して開発されました。 これらのバージョンまたはそれ以降のバージョンの使用を推奨します。
qiskit[all]~=2.4.0
個のビット(または量子ビット)のセットがある場合、通常は各ビットにのラベルを付けます。異なるソフトウェアやリソースは、コンピューターメモリと画面表示の両方でこれらのビットを順序付ける方法を選択する必要があります。
Qiskitの規則
Qiskit SDKが異なるシナリオでビットを順序付ける方法は次のとおりです。
量子回路
QuantumCircuitクラスは、その量子ビットをリスト(QuantumCircuit.qubits)に格納します。このリスト内の量子ビットのインデックスが、量子ビットのラベルを定義します。
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit
from qiskit import QuantumCircuit, QuantumRegister
from qiskit.circuit import Qubit
qc = QuantumCircuit(2)
qc.qubits[0] # qubit "0"
Qubit(QuantumRegister(2, "q"), 0)
<Qubit register=(2, "q"), index=0>
回路図
回路図では、量子ビットが最上部の量子ビットで、量子ビットが最下部の量子ビットです。QuantumCircuit.drawのreverse_bits引数を使用してこれを変更できます(Qiskitでの順序の変更を参照)。
qc.x(1)
qc.draw()
q_0: ─────
┌───┐
q_1: ┤ X ├
└───┘
整数
ビットを数値として解釈する場合、ビットが最下位ビットで、ビットが最上位ビットです。これは、各ビットが値(labelはQuantumCircuit.qubits内の量子ビットのインデックス)を持つため、コーディング時に便利です。たとえば、次の回路実行は、ビットが0、ビットが1で終了します。これは10進整数2として解釈されます(確率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()}")
> Counts: {'10': 1024}
文字列
ビット(または量子ビット)のリストを文字列として表示または解釈する場合、ビットが左端のビットで、ビットが右端のビットです。これは、通常、最上位桁を左側に書く数値の表記法に従っており、Qiskitでは、ビットが最上位ビットとして解釈されるためです。
たとえば、次のセルは、1量子ビット状態の文字列からStatevectorを定義します。この場合、量子ビットは状態にあり、量子ビットは状態にあります。
from qiskit.quantum_info import Statevector
sv = Statevector.from_label("0+")
sv.probabilities_dict()
{np.str_('00'): np.float64(0.4999999999999999),
np.str_('01'): np.float64(0.4999999999999999)}
これは、ビット文字列を解釈する際に時々混乱を引き起こします。左端のビットがビットであると期待するかもしれませんが、通常はビットを表します。