问题描述
我试图多次运行量子电路,每次使用不同的随机状态 - 单个量子位,即 |\psi>= a|0> + b|1> 具有不同的 a 和 b。一旦每个量子位通过电路,我就会保存最终状态的状态向量,并通过计算 \theta 和 \phi 将其转换为球坐标。我将每个 \theta 和 \phi 值附加到一个列表中,然后将它们绘制在直方图上(下面省略)。
虽然这有效,但对于大的 'num_states' 它非常慢,所以我想知道是否有办法在执行电路时使用 'shots' 功能,因为您可以编写:
job = execute(qc,backend,shots=1000)
我尝试玩弄这个,但发现在生成初始随机状态后,它以相同的状态重复了电路的射击次数,而不是每次都做不同的状态。我想使用投篮功能,因为我相信这会更快,因为 Qiskit 内置了 OpenMP。
关于我如何能够在每次使用镜头时实现不同状态的任何想法将不胜感激:)
import numpy as np
from qiskit import(
QuantumCircuit,execute,Aer)
from math import pi
from qiskit.quantum_info import random_statevector
#----------------------------------------------------------------------#
backend = Aer.get_backend('statevector_simulator')
def simulate_states(num_states):
qc = QuantumCircuit(1)
theta_vals = []
phi_vals = []
for i in range(num_states):
random_state = random_statevector(2).data
qc.initialize(random_state,0)
qc.z(0)
job = execute(qc,backend)
result = job.result()
out_state = result.get_statevector()
theta,phi,alpha_r,alpha_i,beta_r,beta_i = state_coords(out_state)
theta += pi/2
theta_vals.append(theta)
phi_vals.append(phi)
return theta_vals,phi_vals
def state_coords(statevector):
"""
determines the spherical coordinates of a state on the Bloch sphere i.e. calculates \theta and \phi.
"""
alpha = statevector[0]
alpha_r = alpha.real
alpha_i = alpha.imag
beta = statevector[1]
beta_r = beta.real
beta_i = beta.imag
theta = np.arcsin(2*((alpha_r*beta_r) - (alpha_i*beta_i)))
phi = 2*np.arccos(2*((alpha_r**2)+(beta_r**2))-1)
return theta,beta_i
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)