与えられた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)
興味深い....私もエラーはありませんが、出力結果は少し異なります>>>> 2.02845299116e + 20' – Aaron
本当に面白いです...私の前回はWindowsマシン2.7.12を実行しています。私がUbuntu 14.04でpythonバージョン2.7.6で実行すると、 '>>> 2.09312088926e + 20'となります。私のscipyのバージョンはそれぞれ0.17.0と0.13.3です。実際の補間関数にわずかな違いがある必要があります – nanoPhD
ありがとうございます!私は実際のプロジェクトの別の場所で最後の2行目を持っていました。それがあなたのために働いていると聞いたら、私はそれを上記に変更しました。しかし、私は上記のコードは私にxを与えるときに私はそれを与えることに気づいたが、私はその逆をしたい。上のコードでyとxを逆にすると、別のエラー "numpy.linalg.linalg.LinAlgError:特異行列"が返されます。これについてのアイデアは? – user6518967