このページのコードは、以下の要件に基づいて開発された。 これらのバージョンまたは新しいバージョンの使用をお勧めします。
qiskit[all]~=2.5.1
Qiskit SDK におけるビット順序
(またはqubits)ビットのセットがある場合、通常は各ビットに 。さまざまなソフトウェアやリソースは、コンピュータのメモリ上でも画面上でも、これらのビットをどのように並べるかを選択しなければならない。 異なるソフトウェアやリソースは、コンピュータのメモリ上と画面上の両方で、これらのビットをどのように順序付けるかを選択しなければなりません。
Qiskitの規約
ここでは、Qiskit SDKが異なるシナリオでどのようにビットを注文するかを説明します。
量子回路
QuantumCircuit クラスはその量子ビットをリストに格納する。 (QuantumCircuit.qubits) に格納する。このリストの中のqubitのインデックスが、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>
回路図
回路図上では、 が一番上の量子ビットで、 が一番下の量子ビットである。 である。 これを変更したい場合は、 reverse_bits の議論 QuantumCircuit.draw ( Qiskit での順序の変更を参照してください)。
qc.x(1)
qc.draw()Output:
q_0: ─────
┌───┐
q_1: ┤ X ├
└───┘
整数
ビットを数字として解釈する場合、ビット は最下位ビットであり、ビット は最上位ビットである。 ビット が最上位ビットである。 これはコーディングの際に役立つ。 でのqubitのインデックスである)。 QuantumCircuit.qubits). 例えば、以下の回路の実行は終了する。 ビット が 0、ビット が 1。 これは 進整数 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()}")Output:
> Counts: {'10': 1024}
文字列
ビット(または量子ビット)のリストを文字列として表示または解釈する場合、ビット は左端のビットで、ビット は右端のビットである。 というのも 通常、数値は最上位桁を左にして書きます。 Qiskitではビット が最上位ビットと解釈されるからです。
例えば、次のセルは単一量子ビット状態の文字列から Statevector を定義する。 を定義する。 この場合、qubit は状態 にあり、qubit は状態 にある。 qubit 、状態 。
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)}
このため、ビット列を解釈する際に混乱が生じることがある。 というのも、左端のビットは通常ビット .
状態ベクトル行列
状態ベクトルを複素数(振幅)のリストとして表現する場合、 Qiskit は、 インデックス の振幅が計算基底状態 を表すように、 これらの振幅を順序付けます。 計算基底状態 を表します。
print(sv[1]) # amplitude of state |01>
print(sv[2]) # amplitude of state |10>Output:
(0.7071067811865475+0j)
0j
ゲイツ
Qiskitの各ゲートは、独自の方法で量子ビットのリストを解釈することができます。 制御されたゲートは通常、 (control, target) に従います。
例えば、次のセルは制御されたXゲートを追加します。 がコントロール、 がターゲットである。
from qiskit import QuantumCircuit
qc = QuantumCircuit(2)
qc.cx(0, 1)
qc.draw()Output:
q_0: ──■──
┌─┴─┐
q_1: ┤ X ├
└───┘
このCX-gateは、先に述べたQiskitの慣例に従い、変換を実行する。 は変換 を行うので 以下の行列を持つ。
Qiskitにおける順序変更
量子ビットの順序が逆(つまり、 )の回路を描くには、。 )、引数 reverse_bits 。 これは生成された Xゲートは依然として量子ビット に作用する。
from qiskit import QuantumCircuit
qc = QuantumCircuit(2)
qc.x(0)
qc.draw(reverse_bits=True)Output:
q_1: ─────
┌───┐
q_0: ┤ X ├
└───┘
reverse_bits 。 qubitsのラベルを反転した新しい回路を返します(これは元の回路を変更しません)。
qc.reverse_bits().draw()Output:
q_0: ─────
┌───┐
q_1: ┤ X ├
└───┘
この新しい回路では、Xゲートは量子ビット に作用する。
次のステップ
- チュートリアルの「 グローバーのアルゴリズム 」で回路の使用例をご覧ください。
- QuantumCircuit API リファレンスを調べる。