我使用量子模拟类QuTIP编写了一个返回浮点数的函数。接下来,我在函数上调用了scipy.optimize.fmin_cg。我一直收到错误:
AttributeError: 'numpy.ndarray' object has no attribute 'expm'
就行:
U_sq = H_sq.expm
但是H_sq是Qobj的一个实例,而不是一个ndarray。如果我在scipy.optimize.fmin_cg之外运行该函数,则返回类型为' instance&#39 ;;当它在fmin_cg内部运行时,它将类型返回为' ndarray'。
为什么这样做?在python中是否有一个优化函数会尊重使用这样的实例?
以下是代码:
from qutip import *
from numpy import *
import scipy.optimize
def sq_fidelity(eps,N=7):
H_sq = squeez(N,eps);
print type(H_sq);
one_ph = basis(N,1);
U_sq = H_sq.expm();
squ = U_sq*one_ph;
fidelity = expect(fock_dm(N,1),squ);
return float(fidelity)
if __name__=='__main__':
print sq_fidelity(0.2);
eps = scipy.optimize.fmin_cg(sq_fidelity, x0=0.2, args=(7,));
答案 0 :(得分:1)
这里的问题是fmin_cg
正在将ndarray
(长度为1)传递给您的目标函数。您只需将sq_fidelity
的第一行更改为:
H_sq = squeez(N, float(eps))