2016-08-19 20 views
0

我正在嘗試使用Python插值函數來獲取給定x的值y,但是我得到了錯誤「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。如果我使用python 2.7.6在Ubuntu 14.04上運行它,我會得到>>> >>> 2.09312088926e + 20'。我的scipy版本分別是0.17.0和0.13.3。必須與實際插值函數 – nanoPhD

+0

的微小變化有關,謝謝兩位!在我的實際項目中,我在不同的地方做了倒數第二線,當我聽說它適用於您時,我將其更改爲上述內容,現在可以使用!但是我意識到,當我給出它時,上面的代碼給了我x,但我想要相反。當我在上面的代碼中反轉y和x時,會出現另一個錯誤「numpy.linalg.linalg.LinAlgError:singular matrix」。有關於此的任何想法? – user6518967

0

這是星期五,我即將離開工作,我無法弄清楚

enter image description here

MODS的隨意標誌/刪除帖子,我知道這是沒有那麼高效...