2016-08-19 10 views
0

与えられたxの値yを得るためにPythonの補間関数を使用しようとしていますが、エラー "raise ValueError(" xとy配列は補間軸に沿って同じ長さでなければなりません "私のコードで.shapeを使用するときに得られるものに応じて同じサイズと形状の両方があります。プログラミングには新しかったので、配列内で他に何が違うかチェックする方法はわかりません。python - 補間軸に沿って異なる配列の長さですか?

s = [] 

def slowroll(y, t): 

    phi, dphi, a = y 
    h = np.sqrt(1/3. * (1/2. * dphi**2 + 1/2.*phi**2)) 
    da = h*a 
    ddphi = -3.*h*dphi - phi 

    return [dphi,ddphi,da] 


phi_ini = 18. 
dphi_ini = -0.1 
init_y = [phi_ini,dphi_ini,1.] 
h_ini =np.sqrt(1/3. * (1/2. * dphi_ini**2. + 1/2.*phi_ini**2.)) 

t=np.linspace(0.,20.,100.) 

from scipy.integrate import odeint 

sol = odeint(slowroll, init_y, t) 

phi = sol[:,0] 
dphi = sol[:,1] 
a=sol[:,2] 
n=np.log(a) 
h = np.sqrt(1/3. * (1/2. * dphi**2 + 1/2.*phi**2)) 

s.extend(a*h) 
x = np.asarray(s) 
y = np.asarray(t) 
F = interp1d(y, x, kind='cubic') 

print F(7.34858263) 

答えて

0

必要な輸入品に追加した後、私はバージョン2.7.12を使用してエラーを再現することはできませんされてきました。あなたは何のpythonのバージョンを実行している?

import numpy as np 
from scipy.interpolate import interp1d 

s = [] 

def slowroll(y, t): 

    phi, dphi, a = y 
    h = np.sqrt(1/3. * (1/2. * dphi**2 + 1/2.*phi**2)) 
    da = h*a 
    ddphi = -3.*h*dphi - phi 

    return [dphi,ddphi,da] 


phi_ini = 18. 
dphi_ini = -0.1 
init_y = [phi_ini,dphi_ini,1.] 
h_ini =np.sqrt(1/3. * (1/2. * dphi_ini**2. + 1/2.*phi_ini**2.)) 

t=np.linspace(0.,20.,100.) 

from scipy.integrate import odeint 

sol = odeint(slowroll, init_y, t) 

phi = sol[:,0] 
dphi = sol[:,1] 
a=sol[:,2] 
n=np.log(a) 
h = np.sqrt(1/3. * (1/2. * dphi**2 + 1/2.*phi**2)) 

s.extend(a*h) 
x = np.asarray(s) 
y = np.asarray(t) 
F = interp1d(y, x, kind='cubic') 

print F(7.34858263) 

出力: 2.11688518961e+20

+0

興味深い....私もエラーはありませんが、出力結果は少し異なります>>>> 2.02845299116e + 20' – Aaron

+0

本当に面白いです...私の前回はWindowsマシン2.7.12を実行しています。私がUbuntu 14.04でpythonバージョン2.7.6で実行すると、 '>>> 2.09312088926e + 20'となります。私のscipyのバージョンはそれぞれ0.17.0と0.13.3です。実際の補間関数にわずかな違いがある必要があります – nanoPhD

+0

ありがとうございます!私は実際のプロジェクトの別の場所で最後の2行目を持っていました。それがあなたのために働いていると聞いたら、私はそれを上記に変更しました。しかし、私は上記のコードは私にxを与えるときに私はそれを与えることに気づいたが、私はその逆をしたい。上のコードでyとxを逆にすると、別のエラー "numpy.linalg.linalg.LinAlgError:特異行列"が返されます。これについてのアイデアは? – user6518967

0

それは金曜日だ、私は

enter image description here

仕事を出ようよ、と私はそれを把握することはできません

改造は、私はそれを知っている、フラグ気軽に/投稿を削除それほど生産的ではありません...

関連する問題