0

我使用返回浮点数的量子模拟类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 之外运行该函数,它会将类型返回为“实例”;当它在 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,));
4

1 回答 1

1

这里的问题fmin_cg是将ndarray(长度为 1)传递给您的目标函数。您只需将第一行更改为即可提取标量值sq_fidelity

H_sq = squeez(N, float(eps))
于 2012-06-05T20:30:12.150 回答