当我使用Scipy优化时,为什么我的'实例'会变成'ndarray'?

时间:2012-06-05 16:59:20

标签: python optimization scipy

我使用量子模拟类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,));

1 个答案:

答案 0 :(得分:1)

这里的问题是fmin_cg正在将ndarray(长度为1)传递给您的目标函数。您只需将sq_fidelity的第一行更改为:

即可提取标量值
H_sq = squeez(N, float(eps))