LoginSignup
4
3

More than 3 years have passed since last update.

Qiskit: 任意の状態を作成する回路が作りたい!!

Posted at

はじめに

任意の状態を作成する回路を簡単に作りたい!と思うことはありませんか?
例えば...

\frac{|0>+|1>}{\sqrt{2}}

まあ,これは簡単ですね.以下の回路で作成できます.

1.png

しかし,Hadamard gateを知らなくてもこの状態を作成することができるツールがあるのです!
それが,StateVectorCircuitです.

StateVectorCircuit

先ほどの状態を作る回路をStateVectorCircuitを用いて作成してみましょう.

まずは,使用するパッケージをimportします.

import numpy as np
from qiskit.aqua.circuits import StateVectorCircuit
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister, execute
from qiskit import BasicAer
from qiskit.visualization import plot_histogram

次に今回作りたい状態を定義

state = [1 / np.sqrt(2), 1 / np.sqrt(2)]

これをStateVectorCircuitに入力します.

svc = StateVectorCircuit(state)

ここには二つの値が格納されています.

print(svc._num_qubits)
# 1
print(svc._state_vector)
# [0.70710678 0.70710678]

ここではまだ回路は作成されていないので,construct_circuitを行います.

qc = svc.construct_circuit()

作成された回路がこれ

2.png

では実際に実行して結果を見てみましょう.

cr = ClassicalRegister(1)
qc.add_register(cr)
qc.measure([0], [0])
num_shots = 10000
backend = BasicAer.get_backend('qasm_simulator')
results = execute(qc, backend, shots=num_shots).result()
counts = results.get_counts(qc)
plot_histogram(counts1)

3.png

ふむ.良い感じですね.

ちなみに,勝手にnormalizeしてくれるので例えば

state = [100, 100]

とかでも対応してくれます.
もちろん複数qubitsでも大丈夫なのです.

まとめ

今回は何かと便利そうなStateVectorCircuitを紹介しました.
ちなみに使用しているQiskitのバージョンが古いとerrorを吐くかもしれません.qiskit自体が日々進化していますからね.

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3