2012-06-05 18 views
0

我寫了一個函數,使用量子模擬類QuTIP返回一個浮點數。接下來,我在函數上調用了scipy.optimize.fmin_cg。我不斷收到錯誤:當我使用Scipy優化時,爲什麼我的'實例'變成'ndarray'?

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,)); 
+1

向我們顯示代碼即可提取標量值。 *你如何*調用'fmin_cg',更重要的是,你在做什麼結果? – kindall

回答

1

這裏的問題是,fmin_cg是傳遞一個ndarray(長度1)你的目標函數。只需將sq_fidelity的第一行更改爲:

H_sq = squeez(N, float(eps)) 
相關問題