概要
- Qiskit について, サンプルプログラムを動かしてみた.
- 動作環境は, Google Colaboratory で行った
- 実行プログラム, 解説は, 下記の参照サイトをご覧ください
感想
- 本家のサイトにあるように, 量子ゲートの解説が, 非常に豊富だと驚いた.
- 時間を見つけて, 今後も, ドキュメントの残りの部分を進めていこうと思う.
量子ゲートのサンプル
※参照サイトにあるように, 事前に必要なライブラリを, import させておく.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[編集内容(Import packages)] # Useful additional packages import matplotlib.pyplot as plt %matplotlib inline import numpy as np from math import pi from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister, execute from qiskit.tools.visualization import circuit_drawer from qiskit.quantum_info import state_fidelity from qiskit import BasicAer backend = BasicAer.get_backend('unitary_simulator') |
- Identity gate
- U1 gate
- U1 gate
- Pauli X, Y, Z, Hadamard, S, S dagger, T, T dagger gate
- Rotation around X, Y, Z-axis
- Controlled X, Y, Z, Hadamard Gates
1 2 3 4 5 |
[編集内容(Bell state)] q = QuantumRegister(1) qc = QuantumCircuit(q) qc.id(q) qc.draw() |
1 2 3 |
┌───┐ q0_0: ┤ I ├ └───┘ |
1 2 3 4 5 |
[編集内容(U1 gate)] q = QuantumRegister(1) qc = QuantumCircuit(q) qc.u1(pi / 2, q) qc.draw() |
1 2 3 4 5 6 7 |
[出力結果] /usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:3: DeprecationWarning: The QuantumCircuit.u1 method is deprecated as of 0.16.0. It will be removed no earlier than 3 months after the release date. You should use the QuantumCircuit.p method instead, which acts identically. This is separate from the ipykernel package so we can avoid doing imports until ┌─────────┐ q1_0: ┤ U1(π/2) ├ └─────────┘ |
1 2 3 4 5 |
[編集内容(U1 gate)] q = QuantumRegister(1) qc = QuantumCircuit(q) qc.u(0, 0, pi / 2, q) qc.draw() |
1 2 3 4 |
[出力結果] ┌────────────┐ q3_0: ┤ U(0,0,π/2) ├ └────────────┘ |
1 2 3 4 5 6 7 8 9 10 11 12 |
[編集内容(Pauli X, Y, Z, Hadamard, S, S dagger, T, T dagger gate)] qr = QuantumRegister(3, 'q') qc = QuantumCircuit(qr) qc.x(qr[0]) qc.y(qr[1]) qc.z(qr[2]) qc.h(qr[0]) qc.s(qr[1]) qc.sdg(qr[2]) qc.t(qr[0]) qc.tdg(qr[1]) qc.draw() |
1 2 3 4 5 6 7 8 |
[出力結果] ┌───┐ ┌───┐ ┌───┐ q_0: ┤ X ├─┤ H ├──┤ T ├─ ├───┤ ├───┤ ┌┴───┴┐ q_1: ┤ Y ├─┤ S ├─┤ TDG ├ ├───┤┌┴───┴┐└─────┘ q_2: ┤ Z ├┤ SDG ├─────── └───┘└─────┘ |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[編集内容(Rotation around X, Y, Z-axis)] qr = QuantumRegister(3, 'q') qc = QuantumCircuit(qr) qc.rx(pi / 1, qr[0]) qc.ry(pi / 2, qr[0]) qc.rz(pi / 3, qr[0]) qc.ry(pi / 4, qr[1]) qc.rz(pi / 5, qr[1]) qc.rx(pi / 6, qr[1]) qc.rz(pi / 7, qr[2]) qc.rx(pi / 8, qr[2]) qc.ry(pi / 9, qr[2]) qc.draw() |
1 2 3 4 5 6 7 8 |
[出力結果] ┌───────┐ ┌─────────┐┌─────────┐ q_0: ─┤ RX(π) ├─┤ RY(π/2) ├┤ RZ(π/3) ├ ┌┴───────┴┐├─────────┤├─────────┤ q_1: ┤ RY(π/4) ├┤ RZ(π/5) ├┤ RX(π/6) ├ ├─────────┤├─────────┤├─────────┤ q_2: ┤ RZ(π/7) ├┤ RX(π/8) ├┤ RY(π/9) ├ └─────────┘└─────────┘└─────────┘ |
1 2 3 4 5 6 7 8 |
[編集内容(Controlled X, Y, Z, Hadamard Gates)] q = QuantumRegister(2) qc = QuantumCircuit(q) qc.cx(q[0], q[1]) qc.cy(q[1], q[0]) qc.cz(q[0], q[1]) qc.ch(q[1], q[0]) qc.draw() |
1 2 3 4 5 6 |
[出力結果] ┌───┐ ┌───┐ q10_0: ──■──┤ Y ├─■─┤ H ├ ┌─┴─┐└─┬─┘ │ └─┬─┘ q10_1: ┤ X ├──■───■───■── └───┘ |