Qiskitで量子回路の行列を確認する(unitary_simulator)

一般的に、量子ビットに対するゲート操作と、その集合である量子回路はユニタリ行列により表される。

Qiskitで量子回路の行列表現を確認するにはunitary_simulatorを使用する。

unitary_simulatorAerのバックエンドとして提供され、量子回路に対応する行列を出力することができる。

UnitarySimulator — Qiskit Aer 0.12.1 documentation

例えば以下のように、1つのアダマールゲート Hだけで構成される回路があるとする。

from qiskit import QuantumCircuit

qc = QuantumCircuit(1)
qc.h(0)

qc.draw()

この行列表現は以下のように出力できる。

from qiskit import Aer, execute

job = Aer.get_backend('unitary_simulator').run(qc)

print(job.result().get_unitary())
# Operator([[ 0.70710678+0.00000000e+00j,  0.70710678-8.65956056e-17j], [ 0.70710678+0.00000000e+00j, -0.70710678+8.65956056e-17j]], input_dims=(2,), output_dims=(2,))

これは実際の値と一致する。

 H = \frac{1}{\sqrt{2}}\begin{pmatrix} 1&1\\1&-1\end{pmatrix}

または、以下のようにバックエンドのrunメソッドを使用することもできる。どちらも得られる結果は同じ。

from qiskit import Aer

job = execute(qc, Aer.get_backend('unitary_simulator'))

print(job.result().get_unitary())
# Operator([[ 0.70710678+0.00000000e+00j,  0.70710678-8.65956056e-17j], [ 0.70710678+0.00000000e+00j, -0.70710678+8.65956056e-17j]], input_dims=(2,), output_dims=(2,))

なお、量子ビット状態ベクトルを確認するstatevector_simulatorについては以下の記事を参照。

happy-quantum.hateblo.jp

また、回路の初期化方法については以下の記事を参照。

happy-quantum.hateblo.jp