0

float を返す量子シミュレーション クラスQuTIPを使用して関数を作成しました。次に、関数で scipy.optimize.fmin_cg を呼び出しました。エラーが発生し続けます:

AttributeError: 'numpy.ndarray' object has no attribute 'expm'

行で:

U_sq = H_sq.expm

しかし、H_sq は ndarray ではなく、Qobj のインスタンスです。関数を 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

ここでの問題は、 (長さ 1 の) を目的関数にfmin_cg渡すことです。ndarrayの最初の行を次のように変更するだけで、スカラー値を抽出できますsq_fidelity

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