Q Experience 用户指南中的 qiskit 示例不显示情节
qiskit example in Q Experience User Guide doesn't show plot
IBM Q Experience 用户指南中的 Bloch sphere example 应该在末尾显示一个图。当我 运行 示例时它不显示情节。
我可以内联绘制电路和其他绘图(在 jupyter 中),但在这个绘图中对我不起作用。
代码(完全从示例页面复制而来)如下所示。
我的环境是:
Fedora Core 30
Qiskit 0.8.2
Matplotlib 3.1.0
Python 3.7.3
Conda 4.6.11 (conda-build version: 3.17.8)
jupyter core : 4.5.0
jupyter-notebook : 5.7.8
qtconsole : not installed
ipython : 7.5.0
ipykernel : 5.1.1
jupyter client : 5.2.4
jupyter lab : not installed
nbconvert : 5.5.0
ipywidgets : 7.4.2
nbformat : 4.4.0
traitlets : 4.3.2
# quantum_phase_bloch.py
import numpy as np
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister, execute, Aer
from qiskit.tools.visualization import plot_bloch_vector
# Define the Quantum and Classical Registers
q = QuantumRegister(1)
c = ClassicalRegister(1)
# Build the circuits
pre = QuantumCircuit(q, c)
pre.h(q)
pre.barrier()
meas_x = QuantumCircuit(q, c)
meas_x.barrier()
meas_x.h(q)
meas_x.measure(q, c)
meas_y = QuantumCircuit(q, c)
meas_y.barrier()
meas_y.s(q).inverse()
meas_y.h(q)
meas_y.measure(q, c)
meas_z = QuantumCircuit(q, c)
meas_z.barrier()
meas_z.measure(q, c)
bloch_vector = ['x', 'y', 'z']
exp_vector = range(0, 21)
circuits = []
for exp_index in exp_vector:
middle = QuantumCircuit(q, c)
phase = 2*np.pi*exp_index/(len(exp_vector)-1)
middle.u1(phase, q)
circuits.append(pre + middle + meas_x)
circuits.append(pre + middle + meas_y)
circuits.append(pre + middle + meas_z)
# Execute the circuit
job = execute(circuits, backend = Aer.get_backend('qasm_simulator'), shots=1024)
result = job.result()
# Plot the result
for exp_index in exp_vector:
bloch = [0, 0, 0]
for bloch_index in range(len(bloch_vector)):
data = result.get_counts(circuits[3*exp_index+bloch_index])
try:
p0 = data['0']/1024.0
except KeyError:
p0 = 0
try:
p1 = data['1']/1024.0
except KeyError:
p1 = 0
bloch[bloch_index] = p0-p1
plot_bloch_vector(bloch)
ImportanceOfBeingErnest 提供的最后一个 link 显示了一个解决问题的函数(这可能不是最好的方法,但它帮助了我所以我在这里发布了修改后的代码供其他人使用).
修改后的代码为:
# quantum_phase_bloch.py
%matplotlib inline
import matplotlib.pyplot as plt
def show_figure(fig):
# See https://github.com/Qiskit/qiskit-terra/issues/1682
new_fig = plt.figure()
new_mngr = new_fig.canvas.manager
new_mngr.canvas.figure = fig
fig.set_canvas(new_mngr.canvas)
plt.show(fig)
import numpy as np
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister, execute, Aer
from qiskit.tools.visualization import plot_bloch_vector
# Define the Quantum and Classical Registers
q = QuantumRegister(1)
c = ClassicalRegister(1)
# Build the circuits
pre = QuantumCircuit(q, c)
pre.h(q)
pre.barrier()
meas_x = QuantumCircuit(q, c)
meas_x.barrier()
meas_x.h(q)
meas_x.measure(q, c)
meas_y = QuantumCircuit(q, c)
meas_y.barrier()
meas_y.s(q).inverse()
meas_y.h(q)
meas_y.measure(q, c)
meas_z = QuantumCircuit(q, c)
meas_z.barrier()
meas_z.measure(q, c)
bloch_vector = ['x', 'y', 'z']
exp_vector = range(0, 21)
circuits = []
for exp_index in exp_vector:
middle = QuantumCircuit(q, c)
phase = 2*np.pi*exp_index/(len(exp_vector)-1)
middle.u1(phase, q)
circuits.append(pre + middle + meas_x)
circuits.append(pre + middle + meas_y)
circuits.append(pre + middle + meas_z)
# Execute the circuit
job = execute(circuits, backend = Aer.get_backend('qasm_simulator'), shots=1024)
result = job.result()
# Plot the result
for exp_index in exp_vector:
bloch = [0, 0, 0]
phase = 2*np.pi*exp_index/(len(exp_vector)-1)
phase_deg = phase / (2.0*np.pi) * 360.0
for bloch_index in range(len(bloch_vector)):
data = result.get_counts(circuits[3*exp_index+bloch_index])
try:
p0 = data['0']/1024.0
except KeyError:
p0 = 0
try:
p1 = data['1']/1024.0
except KeyError:
p1 = 0
bloch[bloch_index] = p0-p1
show_figure(plot_bloch_vector(bloch, title='Bloch sphere with phase {:.1f} degrees'.format(phase_deg)))
IBM Q Experience 用户指南中的 Bloch sphere example 应该在末尾显示一个图。当我 运行 示例时它不显示情节。
我可以内联绘制电路和其他绘图(在 jupyter 中),但在这个绘图中对我不起作用。
代码(完全从示例页面复制而来)如下所示。
我的环境是:
Fedora Core 30
Qiskit 0.8.2
Matplotlib 3.1.0
Python 3.7.3
Conda 4.6.11 (conda-build version: 3.17.8)
jupyter core : 4.5.0
jupyter-notebook : 5.7.8
qtconsole : not installed
ipython : 7.5.0
ipykernel : 5.1.1
jupyter client : 5.2.4
jupyter lab : not installed
nbconvert : 5.5.0
ipywidgets : 7.4.2
nbformat : 4.4.0
traitlets : 4.3.2
# quantum_phase_bloch.py
import numpy as np
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister, execute, Aer
from qiskit.tools.visualization import plot_bloch_vector
# Define the Quantum and Classical Registers
q = QuantumRegister(1)
c = ClassicalRegister(1)
# Build the circuits
pre = QuantumCircuit(q, c)
pre.h(q)
pre.barrier()
meas_x = QuantumCircuit(q, c)
meas_x.barrier()
meas_x.h(q)
meas_x.measure(q, c)
meas_y = QuantumCircuit(q, c)
meas_y.barrier()
meas_y.s(q).inverse()
meas_y.h(q)
meas_y.measure(q, c)
meas_z = QuantumCircuit(q, c)
meas_z.barrier()
meas_z.measure(q, c)
bloch_vector = ['x', 'y', 'z']
exp_vector = range(0, 21)
circuits = []
for exp_index in exp_vector:
middle = QuantumCircuit(q, c)
phase = 2*np.pi*exp_index/(len(exp_vector)-1)
middle.u1(phase, q)
circuits.append(pre + middle + meas_x)
circuits.append(pre + middle + meas_y)
circuits.append(pre + middle + meas_z)
# Execute the circuit
job = execute(circuits, backend = Aer.get_backend('qasm_simulator'), shots=1024)
result = job.result()
# Plot the result
for exp_index in exp_vector:
bloch = [0, 0, 0]
for bloch_index in range(len(bloch_vector)):
data = result.get_counts(circuits[3*exp_index+bloch_index])
try:
p0 = data['0']/1024.0
except KeyError:
p0 = 0
try:
p1 = data['1']/1024.0
except KeyError:
p1 = 0
bloch[bloch_index] = p0-p1
plot_bloch_vector(bloch)
ImportanceOfBeingErnest 提供的最后一个 link 显示了一个解决问题的函数(这可能不是最好的方法,但它帮助了我所以我在这里发布了修改后的代码供其他人使用).
修改后的代码为:
# quantum_phase_bloch.py
%matplotlib inline
import matplotlib.pyplot as plt
def show_figure(fig):
# See https://github.com/Qiskit/qiskit-terra/issues/1682
new_fig = plt.figure()
new_mngr = new_fig.canvas.manager
new_mngr.canvas.figure = fig
fig.set_canvas(new_mngr.canvas)
plt.show(fig)
import numpy as np
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister, execute, Aer
from qiskit.tools.visualization import plot_bloch_vector
# Define the Quantum and Classical Registers
q = QuantumRegister(1)
c = ClassicalRegister(1)
# Build the circuits
pre = QuantumCircuit(q, c)
pre.h(q)
pre.barrier()
meas_x = QuantumCircuit(q, c)
meas_x.barrier()
meas_x.h(q)
meas_x.measure(q, c)
meas_y = QuantumCircuit(q, c)
meas_y.barrier()
meas_y.s(q).inverse()
meas_y.h(q)
meas_y.measure(q, c)
meas_z = QuantumCircuit(q, c)
meas_z.barrier()
meas_z.measure(q, c)
bloch_vector = ['x', 'y', 'z']
exp_vector = range(0, 21)
circuits = []
for exp_index in exp_vector:
middle = QuantumCircuit(q, c)
phase = 2*np.pi*exp_index/(len(exp_vector)-1)
middle.u1(phase, q)
circuits.append(pre + middle + meas_x)
circuits.append(pre + middle + meas_y)
circuits.append(pre + middle + meas_z)
# Execute the circuit
job = execute(circuits, backend = Aer.get_backend('qasm_simulator'), shots=1024)
result = job.result()
# Plot the result
for exp_index in exp_vector:
bloch = [0, 0, 0]
phase = 2*np.pi*exp_index/(len(exp_vector)-1)
phase_deg = phase / (2.0*np.pi) * 360.0
for bloch_index in range(len(bloch_vector)):
data = result.get_counts(circuits[3*exp_index+bloch_index])
try:
p0 = data['0']/1024.0
except KeyError:
p0 = 0
try:
p1 = data['1']/1024.0
except KeyError:
p1 = 0
bloch[bloch_index] = p0-p1
show_figure(plot_bloch_vector(bloch, title='Bloch sphere with phase {:.1f} degrees'.format(phase_deg)))